我对Mockito图书馆有疑问。我试着用它写一些测试,但它并不像我想的那样工作。我的想法是测试课堂测试。如果调用getResult()
方法,则应将结果分配给变量res。
我测试了没有调用getResult()
的方法,因此,正如我所想,变量res应该是未初始化的。
但是信息记录"制作"在实现@ Before-init()时出现,因此res在任何情况下都具有非null值。
请你帮助我说,我做错了什么。如果有任何代码印刷错误,请提前抱歉。
public class Test{
ResultClass res;
TestedClass test;
@Before
public init(){
Mockito.doReturn(makeRes1()).when(test).getResult(Mockito.eq(Argument.VALUE));
Mockito.when(test.getResult(Mockito.eq(Argument.VALUE))).thenReturn(makeRes1());
}
Result makeRes1(){
log.info("makingres");
Result r = new Result(Argument.VALUE);
res = r;
return r;
}
@Test
public test(){
test.goWithoutResult();
Assert.assertEquals(res,null);
}
}
答案 0 :(得分:1)
所以正在调用makeRes1
,但你不知道为什么?
Mockito.doReturn(makeRes1()).when(test).getResult(Mockito.eq(Argument.VALUE));
相当于:
Result result = makeRes1();
Mockito.doReturn(result).when(test).getResult(Mockito.eq(Argument.VALUE));
现在更清楚什么是错的?始终使用makeRes1()
方法调用@Before
,而不仅仅when(test).getResult(...)
。
thenAnswer
:
Mockito.when(test)
.getResult(Mockito.eq(Argument.VALUE))
.thenAnswer(
new Answer<Result>() {
Result answer(InvocationOnMock invocation) {
return makeRes1();
}
});
这会延迟执行makeRes1()
直到getResult
被调用。
但如果您只是这样做以检查是否调用getResult
这不是最好的方法(依赖副作用),那就是{{1方法适用于:
verify