2016-08-29 5 views
0

Grails 2에서 Grails 3에서 작동하는 일련의 단위 테스트를 업그레이드하고 Spock 데이터 기반 테스트 형식을 사용하여 테스트를 수행하는 도메인 테스트에 문제가 발생했습니다.Grails 3 단위 테스트에서 Spock 데이터 기반 테스트 사용하기

import grails.test.mixin.TestFor 
import grails.test.mixin.TestMixin 
import grails.test.mixin.support.GrailsUnitTestMixin 
import spock.lang.Unroll 

import com.spiekerpoint.ark.test.ConstraintsTestSupport 

/** 
    * Unit test for domain class ContactPhoneNumber. 
    */ 
@TestFor(ContactPhoneNumber) 
class ContactPhoneNumberSpec implements ConstraintsTestSupport { 

    def setup() { 
    } 

    def cleanup() { 
    } 

    @Unroll 
    void "test ContactPhoneNumber type constraints"() { 
     when: 
     ContactPhoneNumber obj = new ContactPhoneNumber("$field": val) 

     then: 
     validateConstraints(obj, field, error) 

     where: 
     error  | field   | val 
     'valid'  | 'type'  | 'HOME' 
     'valid'  | 'type'  | 'MOBILE' 
     'valid'  | 'type'  | 'WORK' 
     'valid'  | 'type'  | 'PAGER' 
     'valid'  | 'type'  | 'FAX' 
    } 
} 

나는 ContactPhoneNumberSpec.groovy에서 groovy.lang.MissingPropertyException 무엇입니까 : 26

테스트 실행이 테스트에서 오류, 필드와 val 참조에 작성되지 않기 때문에 내가 테스트를 실행할 때 . 앞서 언급했듯이이 테스트는 Grails 2.5.5에서 작동하므로 Grails 3에 필요한 항목이 누락되었다고 생각됩니다.

편집 : 원래 setup()에서 사용했던 mockForConstraints() 호출을 제거했습니다. 효과 없음.

+0

http://docs.grails.org/latest/guide/testing.html에 따라 "Testing Constraints"를 찾으십시오. 결론은 Grails 3에서 더 이상 사용할 수 없다. – dmahapatro

+0

나는이 섹션을 읽고 다른 테스트 케이스에서 제거했다. 불행히도 나는 여전히 다른 테스트 케이스를 붙여서 질문에 붙여 넣는다. 아무리해도 mockForConstraintsTests를 제거해도 아무런 효과가 없다. 새로운 ContactPhoneNumber 행에서 MissingPropertyException으로 실패합니다. val은 정의되지 않았습니다. 데이터 기반 테스트를 사용하는 데 필요한 다른 것을 놓치고 있습니다. –

답변

0

사용 된 ConstraintsTestSupport 특성이 이전 Grails 2.x 프로젝트의 클래스로 구현되었고 해당 클래스가 spock.lang.Specification을 확장 한 것으로 나타났습니다. 특성으로 변환 될 때 데이터 구동 테스트를 지원하는 데 필요한 기본 Spock 클래스가 더 이상 확장되지 않았습니다.

이 버그는 완전히 다른 모듈에 도입되었으며 Spock 테스트와 마찬가지로 코드를 보면 충분히 분명합니다.

관련 문제