Модульное тестирование классов домена Grails с помощью свойств Set - это безопасно? - PullRequest
0 голосов
/ 31 марта 2010

Я создал класс домена в 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[])
}

Теперь я могу вызывать методы assertLength () и assertEquals () непосредственно в экземпляреиз Set, например, assertLength (x, myObject.tags) assertEquals ([...], myObject.tags)

Я новичок в Groovy и Grails, поэтому не знаю, насколько опасна перегрузка таких методов.Это безопасно?Если это так, я немного * удивлен, что эти методы (или аналогичные) еще не доступны - пожалуйста, дайте мне знать, если они есть.

* Я вижу, как эти методы могут также внести двусмысленность, если люди не ожидают их.Например, assertLength(1, set) всегда проходит, независимо от содержания set

Ответы [ 2 ]

0 голосов
/ 15 июля 2010

Похоже, нет проблем с подходом, изложенным в вопросе.

0 голосов
/ 31 марта 2010

выглядит нормально для меня

Книга Полное руководство по Grails (которая по общему признанию - 2006), она говорит сделать это с:

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

или используя метод size (), например:

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