나는이 특정 주제에 관해 많은 것을 알고 있지만 문제를 겪은 사람을 찾을 수는 없다. 누군가가 나를 설명 할 수 있기를 바랍니다.통합과 단위 테스트 사이의 Grails 오염
@Mock([MyDomain])
...
def mockGApp
void setUp() {
mockGApp = new Object()
mockGApp.metaClass.isDomainClass = { obj -> true }
}
...
void testSomething() {
def myDomain = new MyDomain()
myDomain.grailsApplication = mockGApp
....
}
:
@Override
public boolean equals(Object obj) {
if(!grailsApplication.isDomainClass(obj.getClass())) { return false }
...
}
이 잘 작동하고, 단위 테스트이 내가해야 할 :
나는 equals 메소드에 주입의 GrailsApplication의 역동적 인 방법을 'isDomainClass'를 사용 도메인을 그리고 이것을 test-app -unit (명령 행이나 STS에서)로 실행할 때 잘 돌아갑니다.
그때 사용하는 통합 테스트 집결지 해당 도메인 (NO이 시간을 조롱) 그리고 난 경우
그러나 테스트 응용 프로그램 -integration (중 명령 행 또는 STS)로 실행 때 다시 잘 실행 'test-app'를 실행하여 한 번에 두 번 수행하면 MissingMethodException: no method signature isDomainClass exists with parameters (java.lang.Class) ...
과 그 모든 재즈가 발생합니다.
println
의 서비스에서 테스트 할 때 테스트의 통합 부분에서 내 도메인 클래스의 equals 메서드를 호출하기 전에 grailsApplication.isDomainClass()
을 호출하고 원하는 영향. 그러나 코드가 도메인의 equals 함수에 들어가면 grailsApplication
객체가 서비스에서 참조 된 동일한 객체를 참조하고 동적으로 추가 된 메소드를 가지고 있음에도 불구하고 isDomainClass()
메소드가 더 이상 존재하지 않습니다.
grails가이 클래스에 추가하는 동적 메소드는 도메인 메소드 내에서 호출되었지만 서비스 내에서 주입 될 때 삽입되지 않는 것처럼 보입니다. 그리고 더 이상한 것은 통합 테스트가 단위 테스트를 따를 경우에만 발생합니다. 별도로 처리하면 문제가 없습니다 ...
이 오염은 어디에서 유래합니까? 그것을 해결할 방법이 있습니까?
P. Grails 2.1.0을 사용하는 경우
내가 (..., '도메인') .isArtefactOfType를 사용하여이 주위에 방법을 발견 isDomainClass 그러나 여전히 무슨 일이 일어나고 있는지에 더 많은 빛을 흘리는 사람과 사랑 방법을 방지하는 것보다는 그것 – DJOodle