2013-01-20 2 views
1

도메인 클래스를 만들 때 Grails에서 생성 한 통합 테스트 클래스는 GroovyTestCase 클래스를 확장하지 않습니다. 그러나 나는 많은 저자 (here이 실제로 작동하는 것처럼 보이는 shouldFail 메서드를 사용하기위한 예입니다)에서 권장하는 것을 보았습니다.왜 GroovyTestCase를 상속하면 Grails 2.2에서 Spring 에러가 발생합니까?

Spring Loaded: Cannot reload new version of foo.barTests 
Reason: Supertype changed from java/lang/Object to groovy/util/GroovyTestCase 

내가 걱정해야이 뭔가 : 나는 대화 형 Grails의 콘솔 test-app을 실행할 때

그러나 GroovyTestCase에서 내 테스트 클래스를 확장 다음과 같은 오류 메시지가 가져왔다? 온라인으로 검색 한 결과이 오류에 대해 불평하는 다른 사람들을 찾을 수 없으므로 Grails 2.2에서 새로운 내용 일 수 있습니다. 제발 조언.


나는 Grails의 대화 형 콘솔 내 테스트를 (당신이 인수없이 grails을 실행할 때 당신은 무엇을 얻을) 실행하고 있습니다. 잠시 동안 Object에서 상속 한 테스트를 남겨 뒀지 만 test-app을 실행하면 때때로 이러한 메시지가 HTML 테스트 보고서 (GroovyTestCase에서 Object로 변경됨)의 결과로 가끔 출력됩니다.

+0

또 다른'grails test-app' 전에'grails clean'을 시도 했습니까? 같은 오류가 발생합니까? – Isammoc

+0

링크가 오래되었습니다 (grails 1.3.x에 관한 것입니다) – Isammoc

+0

이상하게도, 확장 기능을 실행 취소하면 grails는 다시 역 분개에 대해 불평합니다 ('groovy/util/GroovyTestCase에서 java/lang/Object'로 변경됨) , 그리고 나는 'grails clean'을 먼저 할 때조차 그렇게한다. – Stephan

답변

2

가 나는

  1. AST 변환 주석과 관련된 Grails의 버그입니다 확신합니다
  2. 스프링이 장착 된 I이이 이상한 행동을 발견 한 것처럼 모듈

.

이 문제의 원인이 된 단계는 Groovy 클래스가 변환없이 한 번 컴파일되어서 서브 클래스가 java.lang.Object이되는 것 같습니다.

AST 변환이 실행되면 클래스가 다시 컴파일됩니다. 이번에는 다른 클래스의 하위 클래스가됩니다. 그런 다음 스프링로드로 인해 메모리에 다시로드되지 않습니다 (JVM에서는 동일한 클래스가 수퍼 클래스를 재정의 할 수 없으므로).

+0

이것이 실제로 Grails의 버그 일 경우 프로덕션 환경에서 부정적인 영향을 미칠 수 있다고 생각합니까? (스프링로드에 대한 지식은 매우 제한적입니다.) Grails의 이전 버전으로 되돌려 야할까요? – Stephan

+0

@Stephan 걱정하지 마세요. 제작시 안전합니다. 이미 클라우드에 2.2 앱이 실행 중입니다. 스프링로드는 'dev' 환경에서만 작동합니다. – chanwit

+0

감사합니다. 나는 그것을 몰랐다. – Stephan

관련 문제