与mockito的分配方法

时间:2015-03-24 16:42:20

标签: java junit mockito

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

1 个答案:

答案 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