假设我想Foo.doSomething(String arg):String
使用EasyMock测试一个方法。我知道我可以使用EasyMock Capture来捕获参数内部设置的值,然后再获取它。在编写测试时,我的目标是在模拟 Foo 的方法时捕获值,然后在我的模拟方法之外获取捕获的值。我正在尝试这样的事情:
Capture<String> stringCapture = new Capture<String>();
EasyMock.expect(foo.doSomething(EasyMock.capture(stringCapture)).andAnswer(new IAnswer<String> {
@Override
public String answer() throws Throwable {
...
});
String retrievedValue = stringCapture.getValue();
但是,当我尝试使用时出现运行时错误getValue()
:
java.lang.AssertionError: Nothing captured yet
at org.easymock.Capture.getValue(Capture.java:80)
at com.example.Test.myTest(...)
....
我希望我可以String
在我的测试方法中但在IAsnwer
闭包之外有一个变量,并在我的方法中设置该变量的值IAnswer.answer()
。问题是String
变量必须标记为final
才能被闭包访问,这使得它无法修改,因此无用。另外,我不希望使用全局来解决这个问题。
我想到的唯一解决方法是使用我自己的具有 String 字段的类,将其声明为final
外部的变量IAnswer
,在期间设置捕获的值answer()
,最后将此值设置为我的测试方法中的字段。也许有更好的方法来做到这一点,因为使用另一个类来提取捕获的值,甚至是全局变量,对我来说似乎很难看。