带有 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();