2010-05-05 2 views
7

단위 테스트/기능 테스트에서 GORM 기능을 테스트해야하는 양과 관련한 "모범 사례"또는 "표준"이 있습니까?Grails GORM을 얼마나 테스트해야합니까?

제 생각에는 대부분의 도메인 테스트를 기능 테스트로 수행하여 전체 grails 환경을 확보해야한다는 것입니다. 그러나 당신은 무엇을 시험합니까? 삽입, 업데이트, 삭제? grails 릴리즈에 의해 더 철저하게 테스트 되었더라도 제약 조건을 테스트합니까?

아니면 그냥 GORM이 할 일을하고 응용 프로그램의 다른 부분으로 이동한다고 가정합니까?

답변

5

내 규칙은 내가 쓴 것을 테스트하는 것입니다. 따라서 사용자 정의 메서드 (또는 클로저)를 작성하면 해당 메서드를 단위 테스트합니다. 이 규칙은 제약 조건을 작성했기 때문에 제약 조건을 테스트한다는 것을 의미합니다. 이를 위해 GrailsUnitTestCase에서 mockForConstraintsTests() 메소드를 사용합니다.

예 제약 차단 :

static constraints = { 
     location(blank:true, nullable:true) 
     make(blank:false, nullable:false) 
     name(blank:false, nullable:false) 
     serviceTag(nullable:true) 
     purchaseDate(blank:false, nullable:false) 
     checkedDate(blank:false, nullable:false) 
     warrantyExpirationDate(nullable:true) 
     notes(blank:true, nullable:true) 
    } 

나는 다음과 같은 제약 단위 테스트를 할 것이다 :

void test_null_constraints_are_checked() { 
     mockForConstraintsTests(Hardware) 
     def hardware = new Hardware() 
     assertFalse hardware.validate() 

     assertEquals 4, hardware.errors.getFieldErrorCount() 
     assertEquals "nullable", hardware.errors["name"] 
     assertEquals "nullable", hardware.errors["checkedDate"] 
     assertEquals "nullable", hardware.errors["purchaseDate"] 
     assertEquals "nullable", hardware.errors["make"] 
} 

이 바로 내 제약에 오타를 잡을 것입니다.

도메인에서 저장, 생성, 업데이트, 삭제를 테스트하지 않습니다. 이것이 실패하면 나는 더 큰 문제가있다!

+0

관계 1-M 등을 테스트 해 보시겠습니까? –

+0

유닛에서 직접 테스트했다고 말할 수는 없습니다. 나는 보통 통합 수준에서 그것들을 선택한다. – zentuit

1

개인적으로 필자는 설정과 관련하여 100 % 편안하지 않은 모든 복잡한 관계와 기본 구현을 덮어 쓰는 모든 접근자를 테스트 할 것입니다.

+0

합리적인 것 같아서, 나는 내 코드 대신 GORM 자체를 테스트하고 있다고 걱정한다. 사물을 보는 방식으로, 내 맵핑은 코드의 일부이며 테스트 중입니다. –

관련 문제