2012-03-22 3 views
4

내 테스트의 결과는 com.example.book.Book : null입니다. 테스트를 디버그하면 b 오브젝트가 이라는 name으로 생성됩니다. 그러나 정적 매핑 belongsTo이 있으므로 테스트가 실패합니다. 이 작업을 어떻게 수행합니까? Books.groovy에서 belongsTo 매핑을 주석 처리하면 테스트가 통과합니다. 그렇다면 매핑을 사용하여 Domain 클래스를 어떻게 테스트해야합니까? Library 개체를 인스턴스화하고 Book 개체를 추가해야합니까? 그렇다고해서 도메인 클래스를 단위 테스트에 포함 시키므로 별도로 테스트하지는 않습니까?관계형 매핑이있는 grails 도메인 클래스를 어떻게 테스트 할 것인가?

아래 코드는 제 코드입니다.

도메인 :

//Book.groovy 
package com.example.book 

class Book { 
    static constraint = { 
     name blank: false, size: 2..255, unique: true 
    } 
    static belongsTo = [lib: Library] 
    String name 
} 

//Library.groovy 
package com.example.library 

class Library { 
    static hasMany = [book: Book, branch: user: User] 
    static constraints = { 
     name blank: false 
     place blank: false 
    } 
    String name 
    String place 
} 

단위 테스트 :

//BookUnitTests.groovy 
package com.example.book 

import grails.test.* 

class BookUnitTests extends GrailsUnitTestCase { 
    protected void setUp() { 
     super.setUp() 
     mockForConstraintsTests(Book) 
    } 

    protected void tearDown() { 
     super.tearDown() 
    } 

    void testPass() { 
     def b = new Book(name: "MyBook") 
     assert b.validate() 
    } 
} 

시험 출력 :

Failure: testPass(com.example.book.BookUnitTests) 
| Assertion failed: 

assert b.validate() 
     | | 
     | false 
     com.example.book.Book : null 

     at com.example.book.BookUnitTests.testPass(BookUnitTests.groovy:17) 

감사합니다.

답변

2

예, 도서가없는 라이브러리는 도서 없이는 존재할 수 없습니다. 도서관을 만들어 책을 배정해야합니다.

belongsTo 사용 여부는 요구 사항에 따라 다릅니다. 라이브러리를 저장하고 결과로 모든 책을 저장해야합니까?

+0

도메인 클래스를 변경할 수 없습니다. 답변 해주셔서 감사합니다. 그것은 나를 올바른 방향으로 생각하게 만들었습니다. Book 객체를 초기화하는 동안'Library' 객체를 만들고 Book 객체에 할당해야합니다 :'def l = new Library (name : "a", place : "p"); def b = new Book (name : "myBook", lib : l);'그런 다음 테스트를 통과하는'b.validate()'를 수행하십시오. 휴! 하루 종일 보냈다. grails들도 그것을 문서화 할 수있었습니다. – boring

+0

Book에 대한 모든 단위 테스트는 LibraryUnitTests에 속해야합니까, 아니면 두 개의 테스트 클래스 사이에 분산되어야합니까? – Alison

+0

@Allison : 현재의 디자인과의 통합 테스트를 위해. 비 지속성 단위 테스트의 경우 무엇이든 할 수 있습니다. –