我在Grails中创建了一个这样的域类:
class MyObject {
static hasMany = [tags: String]
// Have to declare this here, as nullable constraint does not seem to be honoured
Set tags = new HashSet()
static constraints = {
tags(nullable: false)
}
}
编写单元测试以检查MyObject.tags属性的大小和内容,我发现我必须执行以下操作:
assertLength(x, myObject.tags as Object[])
assertEquals(new HashSet([...]), myObject.tags)
为了使编写测试的语法更好,我实现了以下方法:
void assertEquals(List expected, Set actual) {
assertEquals(new HashSet(expected), actual)
}
void assertLength(int expected, Set set) {
assertLength(expected, set as Object[])
}
我现在可以直接在Set的实例上调用assertLength()和assertEquals()方法,例如 assertLength(x,myObject.tags) assertEquals([...],myObject.tags)
我是Groovy和Grails的新手,所以不知道像这样的重载方法是多么危险。安全吗?如果是这样的话,我会对这些方法(或类似方法)尚不可用感到惊讶 - 如果有,请告诉我。
<小时/>
*
我可以看到,如果人们不期待这些方法,这些方法也会引起歧义。例如。无论assertLength(1, set)
的内容是什么,
set
总是会通过
答案 0 :(得分:0)
对我好看
Definitive Guide to Grails这本书(不可否认的是2006年),它说:
assertLength( 1, myObject.tags as Object[] )
或使用size()方法,如:
assertEquals( 1, myObject.tags.size() )
答案 1 :(得分:0)
问题中概述的方法似乎没有任何问题。