【发布时间】:2010-03-31 11:28:10
【问题描述】:
我在 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 的内容是什么
【问题讨论】:
标签: unit-testing grails groovy dns