我有这个代码:
Request r = mock(Request.class);
ClassUtils.calculate(r);
方法 calculate(r) 更改请求的值:
public static String calculate(Request r){
r.setVlaue(...);
...
}
由于 r 是我的测试中的模拟,因此当我使用静态方法时,我该怎么做才能更改其值?谢谢!
嗯,有很多方法可以通往罗马...
如果您只想确保确实调用了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();
但也许最明显的问题是:你确定你需要一个模拟吗?也许一个简单的假对象(只是自己覆盖/实现该类)可能会像任何模拟一样容易地解决问题?