2012-03-09 2 views
2

Mockito 또는 다른 유사한 프레임 워크를 사용하십시오. 패키지 개인 클래스를 조롱하는 방법이 있습니까? DAO 클래스를 조롱하는 서비스 레이어를 테스트하려고합니다. 문제는 DAO 인스턴스가 패키지 전용이며 공장을 통해서만 얻을 수 있다는 것입니다.패키지 개인 클래스를 조롱

MyPackagePrivateDao mockedDao = mock(MyPackagePrivateDao.class); 

컴파일러는 클래스가 패키지 외부에서 액세스 할 수 없다고 말합니다. 예제가 있습니까? 이 Mockito와 수 없습니다

감사

답변

4

, 그것은 실제 클래스의 바이트 코드를 수정해야합니다. 이것은 계획된 기능이 아닙니다.

결국 이러한 DAO를 모의 할 수있는 인터페이스가 없습니까?

또 다른 옵션은 소프트웨어 설계는 정적, 개인, 최종 등을 조롱하도록 강제하는 경우 레거시 코드, 즉 처리하는 좋은이다 PowerMock에 보는 것입니다

+0

인터페이스가 있습니다. 구현 클래스 대신 인터페이스를 모의 할 수 있다는 것을 몰랐습니다. 감사! – Oscar

+0

당신은 환영합니다;) – Brice

3

아마도, 문제는 SUT이다 (그러므로 시험은) 당신이 조롱하고 싶은 수업과는 다른 패키지에 있습니다. 그렇지 않으면 문제가 없습니다.

내가 해결할 수있는 방법은 모의하려고하는 클래스의 테스트 클래스에 정적 유틸리티 메서드를 작성하는 것입니다. 이 유틸리티 메소드는 원하는 클래스의 모의 객체를 만들고 반환해야합니다. 올바른 패키지에 있기 때문에 수행 할 수 있습니다. 그런 다음 mock(MyPackagePrivateDao.class)을 호출하는 대신 유틸리티 메서드를 호출 할 수 있습니다.

관련 문제