测试传入的值..而不仅仅是返回的值

时间:2011-05-12 20:32:38

标签: java unit-testing mockito

所以我有一个看起来像这样的课程。

@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的内容。

有什么想法吗?

2 个答案:

答案 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);
 }

由于显而易见的原因,这并不是我正在做的事情。但这是一个很普遍的案例。