2015-02-02 10 views
0

Play 1.x 앱에 대한 단위 테스트를 작성하고 Mockito를 사용하여 즉시 모의 인스턴스를 쉽게 만들 수 있습니다. 개발 모드에서 실행 중이므로 자주 다시 시작하지 않아도됩니다.개발 모드에서 Play 앱을 실행할 때 Mockito 문제가 발생했습니다.

코드를 변경하고 Play 앱을 다시 시작하지 않고 단위 테스트를 다시 실행하면 문제가 발생합니다. 나는 다음과 같은 예외가 :

A java.lang.ClassCastException has been caught, Cannot cast services.MyService$$EnhancerByMockitoWithCGLIB$$12cee5a2 to services.MyService 

내가 테 응용 프로그램을 다시 시작하고 테스트, 그들 모두가 잘 실행을 재 실행하지만 때마다 다시 시작 몇 분에 저를 차지

. 할 수있는 일이 있습니까?

답변

0

이것은 재생 작업을 할 때 개발 된 코드가 캐시 반사, 거기 CCE 일 관련 라이브러리 문제를 원인 각 다시로드에 변경되는 동안, lib 디렉토리 클래스 로더가 동일하게 유지 알려진 문제입니다.

기본 구성을 무시하여 클래스 캐시를 비활성화해야합니다 (전체 documentation 참조).

아이디어는 테스트 코드베이스에 다음과 같은 정규화 된 이름이 org.mockito.configuration.MockitoConfiguration 인 클래스를 만들고 org.mockito.configuration.DefaultMockitoConfiguration을 확장하고 boolean enableClassClache() 메서드를 재정 의하여 false를 반환하는 것입니다.

+0

IMockitoConfiguration 인터페이스에 enableClassCache() 메서드가 없기 때문에 Mockito의 오래된 버전을 사용해야합니다. 나는 당신이 제안한 것을 업데이트하고 시도하려고 노력할 것입니다. 감사! – preslavrachev

+0

나는이 방법을 구현했으며, 이것이 내 문제를 해결해야한다고 생각한다. 그러나 Play 클래스 로더를 통해이 클래스를로드하는 방법을 찾을 수 없습니다. 컴파일 된 클래스 파일을 Mockito가 가져올 어딘가에 배치해야한다고 생각합니다. 너는 어떤 생각을 가지고 있니? – preslavrachev

+0

테스트 클래스 패스에서 play를 선언 할 때 더미 종속성을 만들어야 할 수도 있습니다. 죄송합니다. 1.x를 잘 모르는 상태에서 그 이상으로 정말로 당신을 도울 수는 없습니다. – Brice