所以我有这样的测试:
public class TimesheetServiceTest {
@Mock
Repository repository;
@Mock
ServiceToMockResult serviceToMockResult;
@InjectMocks
private ServiceToTest serviceToTest = new ServiceToTestImpl();
@Test
public void testLongResult() {
when(serviceToMockResult.getResult(any(String.class)))
.thenReturn(20L); //it's supposed to always return 20L
//8 items length result list
List<Long> results = this.serviceToTest.getResults();
//some more testing after ....
}
}
如您所见,servicetomock.getresult()方法在servicetotest内部被调用。这样做之后,我得到了8个我期望的结果,但其中一些是值0,我还注意到它总是在列表中的位置5和7。值得注意的是,当我在test中直接调用servicetomock.getresult()而不通过其他类时,我得到了预期的结果。
预期结果
20, 20, 20, 20, 20, 20, 20, 20
实际结果
20, 20, 20, 20, 20, 0, 20, 0
2条答案
按热度按时间ve7v8dk21#
将mock注入bean/服务而不是创建它时,让它通过mock创建。在处理之前还要初始化mockito注解。
例子:
bzzcjhmw2#
参数匹配器
any(String.class)
匹配任何字符串,不包括空值。请参阅argumentmatchers。任何文档:
public static <T> T any(Class<T> type)
匹配给定类型的任何对象,不包括空值。很可能是使用null参数调用servicetomockresult.getresult()。由于这样的调用没有存根,因此返回返回类型的默认值(即
0
为了long
)