ExpandoMetaClass를 사용하여 서비스를 통합 테스트에서 항상 성공으로 만들지 만 실제로 실패한 테스트를 하나 갖고 싶습니다. ExpandoMetaClass의테스트 당 클래스의 메타 클래스를 변경하는 방법
사용 예 :
static {
ExpandoMetaClass someService = new ExpandoMetaClass(Object, false)
someService.accessAnotherSystem = { return 'success' }
someService.initialize()
SomeService.metaClass = someService
}
참고 : 현재 서비스 컨트롤러에 대해 정의하지만 즉 SomeService
someService.accessAnotherSystem()
같은 작품 잘라는 이름의 클래스를 참조하는 스프링 빈 이후에는 def someService
에 없다되지 않는다 컨트롤러.
따라서 통합 테스트에서 controller.someService.metaClass.accessAnotherSystem = { return 'failure'}
을 수행 할 수 없습니다.
메모 : 이것은 웹 플로우에 대한 통합 테스트입니다.
하나의 테스트를 위해 metaClass를 재설정 할 수 있습니까? 아니면 내가 원하는 것을 테스트 할 수 있습니까?
이 통합 테스트에 그렇게 이상한 보이는,하지만 난 당신이 그것에 대해 스텁 사용한다고 생각 : http://spock-framework.readthedocs.org/en/latest/interaction_based_testing.html#stubbing – Philippe
당신을 'def cleanup() {}'클로저를 사용하여 metaClass를 재설정 할 수 있습니다. – Abs