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