带有 mockito 的赋值方法
Assignment method with mockito
我有一个关于 Mockito 库的问题。我尝试用它编写一些测试,但它并没有像我想要的那样工作。我的想法是测试class测试。而如果调用getResult()
方法,结果应该赋值给变量res.
我测试了没有调用getResult()
的方法,所以,我想,res变量应该是未初始化的。
但是在执行@Before-init()时会出现信息记录"makingres",所以res在任何情况下都是非空值。
你能不能帮我说说,我做错了什么。如果有任何代码打印错误,请提前致歉。
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);
}
}
所以正在调用 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
这不是最好的方法(依赖于副作用),那就是verify
方法的用途:
verify(test, never()).getResult();
我有一个关于 Mockito 库的问题。我尝试用它编写一些测试,但它并没有像我想要的那样工作。我的想法是测试class测试。而如果调用getResult()
方法,结果应该赋值给变量res.
我测试了没有调用getResult()
的方法,所以,我想,res变量应该是未初始化的。
但是在执行@Before-init()时会出现信息记录"makingres",所以res在任何情况下都是非空值。
你能不能帮我说说,我做错了什么。如果有任何代码打印错误,请提前致歉。
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);
}
}
所以正在调用 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
这不是最好的方法(依赖于副作用),那就是verify
方法的用途:
verify(test, never()).getResult();