내 테스트의 결과는 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)
감사합니다.
도메인 클래스를 변경할 수 없습니다. 답변 해주셔서 감사합니다. 그것은 나를 올바른 방향으로 생각하게 만들었습니다. Book 객체를 초기화하는 동안'Library' 객체를 만들고 Book 객체에 할당해야합니다 :'def l = new Library (name : "a", place : "p"); def b = new Book (name : "myBook", lib : l);'그런 다음 테스트를 통과하는'b.validate()'를 수행하십시오. 휴! 하루 종일 보냈다. grails들도 그것을 문서화 할 수있었습니다. – boring
Book에 대한 모든 단위 테스트는 LibraryUnitTests에 속해야합니까, 아니면 두 개의 테스트 클래스 사이에 분산되어야합니까? – Alison
@Allison : 현재의 디자인과의 통합 테스트를 위해. 비 지속성 단위 테스트의 경우 무엇이든 할 수 있습니다. –