На самом деле это проблема способа, с помощью которого материал mockForConstraintsTests работает в grails, а не проблема использования этого типа mock, обычно в groovy.
Этот тип макетов просто не совместим с макетами, которые создаются mockForConstraintsTests. Если вы хотите использовать эту библиотеку, Джон прав в том, что просто создает и передает простой конкретный элемент класса.
Я на самом деле не большой поклонник насмешек с ограничениями, которые есть в последних версиях Grails, поскольку они не "настоящие", и большая часть вычеркнутых вещей отличается от реального кода, который запускается при подключении в реальную базу данных. Я предпочитаю использовать интеграционные тесты для проверки такого рода ограничений.
Если вы поместите свой тестовый класс в интеграционные тесты и удалите вызов mockForConstraintsTests, ваш код будет работать:
package toplevel.domain
import grails.test.*
class PartyTests extends GrailsUnitTestCase {
Party party
protected void setUp() {
super.setUp()
party = [:] as Party
}
protected void tearDown() {
super.tearDown()
}
void testNullRolesIsValid() {
party.roles = null
assertTrue "The roles should be nullable", party.validate()
}
}
Результаты:
Running 1 integration test...
Running test PartyTests...PASSED
Tests Completed in 226ms ...
-------------------------------------------------------
Tests passed: 1
Tests failed: 0
-------------------------------------------------------