Как выполнить модульное тестирование класса домена Grails с реляционным отображением? - PullRequest
4 голосов
/ 22 марта 2012

Результат моего теста дает com.example.book.Book : null. Когда я отлаживаю тест, объект b создается с "MyBook" в качестве name. Но поскольку он имеет статическое отображение belongsTo, тест не пройден. Как мне сделать эту работу. Когда я комментирую отображение belongsTo в Books.groovy, тест проходит. Итак, как мне проверить классы домена с сопоставлениями. Должен ли я создать экземпляр объекта Library и добавить к нему объект Book? Но это не делает тестирование класса домена изолированным, как это должно быть в модульном тесте, не так ли?

Ниже мой код.

Домены:

//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)

Спасибо.

1 Ответ

2 голосов
/ 22 марта 2012

Да, то, как вы настроили эту Книгу, не может существовать без Библиотеки.Вам нужно будет создать библиотеку и назначить ей книгу.

Имеет ли смысл использование belongsTo, зависит от ваших требований.Вам действительно нужно сохранить библиотеку и в результате все книги будут сохранены?

...