2011-05-12 7 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; 
    } 
} 

내가 시도한 것은이 방법을 테스트하는 것입니다. 불가능한 것 같아. 나는 또 다른 클래스를 조롱했다. 그러나 나는 어떤 변수가 전달되는지를 말할 수 밖에 없다. 아니면 다른 MethodCall이 리턴해야하는 것을 말해라.

내가 원하는 것은 메소드가 호출 된 후 booleanHolder가 될 항목을 설정할 수 있다는 것입니다.

아이디어가 있으십니까?

+0

정확히 어떤 방법을 테스트하고 있습니까? –

+0

Holder 객체를 반환하지 않으면 나는 할 수 있다고 생각하지 않습니다. – JustinKSU

+0

someMethod()를 테스트하고 있습니다. –

답변

0

Holder 클래스는 호출 후에 보유한 값을 가져올 수 있도록 접근 자 (아마도 templated)를 가지는가? 그 값에 대해 assert()를 수행합니까? "참조에 의한"에뮬레이션 매개 변수를 사용하여 다른 메서드를 호출하는 "외부"메서드의 테스트 버전이 있다고 가정합니다.

0

내 문제는 실제로 내가 모키토를 사용하는 방식이었습니다. 나는 잘못된 가치를 지적하고 있었다. 누군가가 어떻게 작동하는지 궁금하다면.

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

이것은 분명히 내가하는 일이 아닙니다. 그러나 위대한 일반화 된 사례입니다.

관련 문제