我在用这样的模拟进行测试时做了一些安排:
private void serviceCallSuccess() {
when(mTmdbWebService.highestRatedMovies()).thenReturn("abc");
when(mTmdbWebService.newestMovies()).thenReturn("abc");
when(mTmdbWebService.popularMovies()).thenReturn("abc");
}
它们确实有效,但是代码太长了。我想结合上述安排进行清洁测试。像这样:
when(
mTmdbWebService.highestRatedMovies()
OR mTmdbWebService.newestMovies()
OR mTmdbWebService.popularMovies()
).thenReturn("abc");
我在这里找到了一些关于在 .thenReturn 中组合函数的代码,但它并不完全是我所需要的。 如何将多个 Mockito 匹配器与逻辑"and"/"or"组合在一起?
一种方法可能是为模拟定义自己的默认行为:
List<String> methodsToMock =
Arrays.asList("highestRatedMovies", "newestMovies", "popularMovies");
mTmdbWebService = mock(TmdbWebService.class, invocationOnMock -> {
Method mockedMethod = invocationOnMock.getMethod();
if (methodsToMock.contains(mockedMethod.getName()) &&
mockedMethod.getParameterCount() == 0 &&
mockedMethod.getReturnType().equals(String.class)) {
return "abc";
}
return null;
});