【发布时间】:2014-06-24 19:15:38
【问题描述】:
我正在使用 Grails 2.4.1,但无法理解如何正确测试域类的唯一约束。
我的域类看起来像: 类人{
String name
static constraints = {
name( unique: true, blank: false )
}
}
和我的测试:
@TestFor(Person)
@TestMixin(GrailsUnitTestMixin)
class PersonSpec extends Specification {
void "name should be unique"() {
given:
mockForConstraintsTests Person
when:
def one = new Person( name: 'john' )
then:
one.save()
when:
def two = new Person( name: 'john' )
then:
! two.validate()
two.errors.hasFieldErrors( 'name' )
}
尽管显然违反了唯一性约束,但第二个实例仍在验证中。有人可以解释一下这里发生了什么以及我应该如何最好地纠正它吗?
谢谢!
--约翰
【问题讨论】:
-
您可以尝试将 2 组 when then 组合在一起。您也可以尝试进行冲洗作为保存的一部分。 one.save(flush:true)
-
谢谢乔。看起来我也可以只刷新第一个实例,即“one.save(flush: true)”
-
您也可以将初始数据传递给 mockForConstraintsTests 方法,例如mockForConstraintsTests(Person, [new Person(name: 'john')])
-
自从您使用 Grails 2.4 后,您就有了使用
HibernateTestMixin的新可能性。它允许您在单元测试中完全集成 Hibernate。您不需要模拟您的域类。见grails.org/doc/latest/guide/introduction.html#whatsNew24
标签: unit-testing grails