再次 如何将多个模拟 正在进行的存根与逻辑“和”/“或”相结合



我在用这样的模拟进行测试时做了一些安排:

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;
});

相关内容

  • 没有找到相关文章

最新更新