나는 BaseClass
방법을 시험하기 위해 junit 테스트를 쓰고있다. 이 메서드는 수퍼 클래스 멤버를 사용합니다. BaseClass
생성자는 super(arg1, arg2)
을 호출합니다. super (arg1, arg2) 생성자에는 슈퍼 클래스의 private 멤버 을 설정하는 종속성 인젝터가 있습니다. 종속성이 설정되어 있지 않으므로 테스트를 실행할 때 super()가 예외를 던지고 있습니다. 나는 의존성 주입으로 private 멤버를 설정하고있는 super()에서 그 문장만을 조롱하고 싶다. mockito와 (과) 어떻게 관련이 있습니까?슈퍼 클래스의 조롱/스파이 개인 회원
3
A
답변
2
필드 주입은 항상 테스트를 위해 문제가됩니다. 따라서 선택 사항이있을 때마다 대신 생성자 주입을 선택하십시오.
종속성 인젝터를 시작하고 실제 클래스 대신 모의 주입을 수행 할 수 있습니다. 솔루션은 당신이 실제로 사용하는 DI 프레임 워크 (guice, cdi, ...)에 의존 할 것입니다. guice의 경우 jiquito를 사용할 수 있습니다 (예 : cd Arquillian). 그러나 테스트 실행 속도가 느려지고 테스트 클래스가 복잡해집니다.
대안으로 사용자는 테스트 필드의 인스턴스에 비공개 필드를 반영 할 수 있으며 모의를 설정하기 만하면됩니다. 뭔가 같이 :
instance = new TestObject();
Field injected = TestObject.class.getDeclaredField("injected");
injected.setAccessible(true);
injected.set(instance, mock(InjectedType.class));
가 TestObject
동안 테스트 할 클래스, injected
뭔가가 InjectedType
그 private 필드의 유형 주입 민간 분야.
@Andreas_D에 감사하지만 문제는 수퍼 클래스의 private 멤버가 생성자에서 설정 중입니다. 그래서 내 코드 자체가 예외를 던지고있다 :'instance = new TestObject();' – vikas