我有这段代码:
Request r = mock(Request.class);
ClassUtils.calculate(r);
方法calculate(r)更改请求的值:
public static String calculate(Request r){
r.setVlaue(...);
...
}
由于r在我的测试中是模拟的,当我使用静态方法时,如何更改其值? 谢谢!
答案 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();
但也许最明显的问题是:你确定你需要模拟吗?也许一个简单的假对象(简单地覆盖/实现该类本身)可以像任何模拟一样轻松地完成这个技巧吗?