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



我有这个代码:

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

但也许最明显的问题是:你确定你需要一个模拟吗?也许一个简单的假对象(只是自己覆盖/实现该类)可能会像任何模拟一样容易地解决问题?

相关内容

  • 没有找到相关文章

最新更新