2011-05-12 70 views
0

所以我有一個類似這樣的類。測試傳入值..不僅僅是返回的值

@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

您正在測試哪種方法? – 2011-05-12 20:34:14

+0

沒有返回持有者對象,我不認爲你可以。 – JustinKSU 2011-05-12 21:23:34

+0

我正在測試someMethod().. – 2011-05-13 12:36:29

回答

0

Holder類是否有一個訪問器(可能是模板化的),以便您可以獲得它在調用之後保留的值,然後針對該值執行assert()?我假設你有一個測試版的「外部」方法,通過「參考」模擬參數調用另一個方法。

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

這,明顯的原因,並不完全是我在做什麼。但這是一個很普遍的例子。

相關問題