如何使用静态方法在模拟上创建更改值?

时间:2016-02-10 10:02:20

标签: mockito

我有这段代码:

    Request r = mock(Request.class);
    ClassUtils.calculate(r);

方法calculate(r)更改请求的值:

public static String calculate(Request r){
     r.setVlaue(...);
     ...
}

由于r在我的测试中是模拟的,当我使用静态方法时,如何更改其值? 谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,很多方式都会导致罗马......

如果您只想确保实际调用r.setValue(...),例如使用" xyz",则可以使用verify

Mockito.verify( r, Mockito.times(1) ).setValue( "xyz" );

当然,您也可以将值存储在答案中,例如......

Mockito.when(r.setValue( Mockito.any() ).thenAnswer( new Answer<Void>() {

     public String answer(InvocationOnMock invocation) throws Throwable {
           String value = invocation.getArguments()[0];
           ...do something with the value...
     }

});

为此,还有一个更简单的选项,再次使用verify ...

ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
Mockito.verify( r, Mockito.times(1) ).setValue( captor.capture() );
String value = captor.getValue();

但也许最明显的问题是:你确定你需要模拟吗?也许一个简单的假对象(简单地覆盖/实现该类本身)可以像任何模拟一样轻松地完成这个技巧吗?