域 class 与派生 属性 的 Grails3 单元测试
Grails3 unit test for domain class with derived property
我有以下域 class 和 derived property lowercaseTag
。
class Hashtag {
String tag
String lowercaseTag
static mapping = {
lowercaseTag formula: 'lower(tag)'
}
}
如果我 运行 下面的单元测试,它会在最后一行失败,因为 lowercaseTag
属性 是 null
并且默认情况下所有属性都有 nullable: false
约束。
@TestFor(Hashtag)
class HashtagSpec extends Specification {
void "Test that hashtag can not be null"() {
when: 'the hashtag is null'
def p = new Hashtag(tag: null)
then: 'validation should fail'
!p.validate()
when: 'the hashtag is not null'
p = new Hashtag(tag: 'notNullHashtag')
then: 'validation should pass'
p.validate()
}
}
问题是在这种情况下如何正确编写单元测试?谢谢!
我相信您已经知道,lowercaseTag
无法测试,因为它依赖于数据库; Grails 单元测试不使用数据库,因此 formula/expression 未评估。
我认为最好的选择是修改约束,使 lowercaseTag
可以为空。
class Hashtag {
String tag
String lowercaseTag
static mapping = {
lowercaseTag formula: 'lower(tag)'
}
static constraints = {
lowercaseTag nullable: true
}
}
否则,您必须修改测试以强制 lowercaseTag
包含 一些 值,以便 validate()
起作用。
p = new Hashtag(tag: 'notNullHashtag', lowercaseTag: 'foo')
我有以下域 class 和 derived property lowercaseTag
。
class Hashtag {
String tag
String lowercaseTag
static mapping = {
lowercaseTag formula: 'lower(tag)'
}
}
如果我 运行 下面的单元测试,它会在最后一行失败,因为 lowercaseTag
属性 是 null
并且默认情况下所有属性都有 nullable: false
约束。
@TestFor(Hashtag)
class HashtagSpec extends Specification {
void "Test that hashtag can not be null"() {
when: 'the hashtag is null'
def p = new Hashtag(tag: null)
then: 'validation should fail'
!p.validate()
when: 'the hashtag is not null'
p = new Hashtag(tag: 'notNullHashtag')
then: 'validation should pass'
p.validate()
}
}
问题是在这种情况下如何正确编写单元测试?谢谢!
我相信您已经知道,lowercaseTag
无法测试,因为它依赖于数据库; Grails 单元测试不使用数据库,因此 formula/expression 未评估。
我认为最好的选择是修改约束,使 lowercaseTag
可以为空。
class Hashtag {
String tag
String lowercaseTag
static mapping = {
lowercaseTag formula: 'lower(tag)'
}
static constraints = {
lowercaseTag nullable: true
}
}
否则,您必须修改测试以强制 lowercaseTag
包含 一些 值,以便 validate()
起作用。
p = new Hashtag(tag: 'notNullHashtag', lowercaseTag: 'foo')