2013-10-27 2 views
3

저는 Mockito와 PowerMock에 익숙하지 않으며이 문제를 해결하는 데 정말로 문제가 있습니다. 나는 어쩌면 내가 일부 개체는 슈퍼 클래스에 설정되어 있는지 확인 할 수 있으며 더 이상 null이 아니고, 그 ....이 첫 번째 방법을위한 일을 할 것 같아요이 내부 정적 클래스를 모의하고 테스트하는 방법

class A { 

    static class B { 

    public class B(Object1 o1, Object2 o2) { 
     setInSuperClass(o1); // this is private method... 
     doSomethingWithInnerClass (new Object3() { 

      @Override 
      public void retreat() { 
       someVar = new Object5(o2); // someVar is from superclass and is private, I know I can get it with PowerMock 
      } 

      @Override 
      public boolean doSomething(){ 
       return true; 
      } 

     }) 

    } 
    } 
} 

: 이것은 내가 가지고 꽤 많은 상황 괜찮을까요?

@Mock 
    Object1 o1; 

    @Mock 
    Object2 o2; 

    public void test() { 
     B b = new B(o1, o2); 
     PowerMockito.verifyPrivate(b).invoke("setInSuperClass", 1 , o1); 
    } 

그러나 doSomethingWithInnerClass를 가장 잘 테스트하는 방법 ??? 제 말은, 제가 그것이 ....라고 불렀음을 증명할 수 있다는 것을 압니다.하지만이 익명의 클래스 인자는 제가 테스트하고 싶습니다. 조언을 주셔서 감사합니다. Thanx

+0

클래스 코드가 컴파일되지 않습니다. –

+0

@JBNizet, 지금 코드에 액세스 할 권한이 없습니다. 일부 타이포가있을 수 있지만 문제의 일반적인 설명입니다. – Julia

+0

클래스 I 소유자는 정적 내부를 하위 패키지의 다른 클래스로 이동합니다. 뿐만 아니라 개인 메서드가 호출되었는지 테스트 할 값이 표시되지 않습니다. –

답변

1

나는 귀하의 생각을 방향을 전환해야한다고 생각합니다. 예를 들어, setInSuperClass이 Powermock을 사용하여 호출되었음을 확인하는 대신 호출 결과를 확인해야합니다. 설정된 필드가 있습니까? 이 분야에 게터가 있습니까? 검증 될 수있는이 분야에 의해 주도되는 다른 행동이 있습니까?

동일 내용은 doSomethingWithInnerClass입니다. 아무 것도하지 않는 메서드 호출은 거기에 없을 수도 있습니다. 전화 한 결과가 있어야합니다. 일부 출력, 다른 메소드/클래스 또는 부작용 호출. 결과를 확인하십시오.

정말 불가능한 경우 테스트를 위해 내부 클래스의 하위 클래스를 만들어야 할 수 있습니다. 이 서브 클래스는, 테스트하는 메소드에 의해 불려가는 메소드를 오버라이드 (override)합니다.

0

개인 변수가 설정되었는지 확인하면 안됩니다. 객체의 후속 동작에 미치는 영향을 확인해야합니다. 따라서 retreat 메서드를 실행하기 위해 수행해야 할 작업을 수행 한 다음 해당 개인 변수의 값을 사용하는 둘러싸는 객체에 대해 다른 메서드를 호출합니다.

변수를 포함하는 객체에서 변수를 설정하지 않으면 변수 자체가 실제로 필요하지 않다는 것을 알 수 있습니다.

관련 문제