Grails单元测试具有Set属性的域类 - 这样安全吗?

时间:2010-03-31 11:28:11

标签: unit-testing grails groovy dns

我在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总是会通过

2 个答案:

答案 0 :(得分:0)

对我好看

Definitive Guide to Grails这本书(不可否认的是2006年),它说:

assertLength( 1, myObject.tags as Object[] )

或使用size()方法,如:

assertEquals( 1, myObject.tags.size() )

答案 1 :(得分:0)

问题中概述的方法似乎没有任何问题。