所以我有一个看起来像这样的课程。
@Inject
AnotherClass anotherClass;
public class Foo {
public Boolean someMethod(){
Holder<Boolean> booleanHolder = new Holder<Boolean>();
//I have no control over this method, but I need it to set booleanHolder
anotherClass.anotherMethodCall(booleanHolder, Boolean.TRUE);
return booleanHolder.value;
}
}
我要做的是测试方法。这看起来几乎不可能。我有另一个类嘲笑。但是我只能告诉传入什么变量。或者告诉另一个方法应该返回什么。
我想要做的是能够设置调用方法后booleanHolder的内容。
有什么想法吗?
答案 0 :(得分:0)
Holder类是否有一个访问器(可能是模板化的),以便您可以在调用后获得它保存的值,然后对该值执行assert()?我假设您有一个“外部”方法的测试版本,该方法使用“by reference”仿真参数调用另一个方法。
答案 1 :(得分:0)
我的问题实际上就是我使用mockito的方式。我指的是错误的价值。如果有人对这是如何运作感到好奇。
public void test_someMethod(){
Foo myClass = new Foo();
AnotherClass mockClass = mock(AnotherClass.class);
final Boolean testBool;
when(anotherClass.anotherMethodCall((Holder)anyObject(),anyBoolean()).thenAnswer(new Answer(){
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
Holder<Boolean> newHolder = (Holder<Boolean>) args[0];
newHolder.value = testBool;
}
}
Boolean retBool = myClass.someMethod();
assertTrue(retBool);
}
由于显而易见的原因,这并不是我正在做的事情。但这是一个很普遍的案例。