2010-03-31 7 views
0

J'ai créé une classe de domaine dans Grails comme ceci:Grails unit tester des classes de domaine avec Set properties - est-ce sûr?

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) 
    } 
} 

tests unitaires d'écriture pour vérifier la taille et le contenu de la propriété MyObject.tags, je trouve que je devais faire ce qui suit:

assertLength(x, myObject.tags as Object[]) 
assertEquals(new HashSet([...]), myObject.tags) 

pour rendre la syntaxe plus agréable pour l'écriture des tests, je mis en œuvre les méthodes suivantes:

void assertEquals(List expected, Set actual) { 
    assertEquals(new HashSet(expected), actual) 
} 

void assertLength(int expected, Set set) { 
    assertLength(expected, set as Object[]) 
} 

Je peux maintenant appeler la assertLength() et assertE Les méthodes quals() directement sur une instance de Set, par ex. assertLength (x, myObject.tags) assertEquals ([...], myObject.tags)

Je suis nouveau Groovy et Grails, donc pas au courant comment méthode dangereuse surcharge comme celui-ci est. Est-ce sûr? Si oui, je suis un peu * surpris que ces méthodes (ou similaires) ne sont pas déjà disponibles - s'il vous plaît faites le moi savoir si elles sont.


* Je peux voir comment ces méthodes pourraient également introduire une ambiguïté si les gens ne les attendaient pas. Par exemple. assertLength(1, set) passe toujours, quel que soit le contenu de set

Répondre

0

Il ne semble pas y avoir de problèmes avec l'approche décrite dans la question.

0

Looks ok me

Le livre Definitive Guide to Grails (qui est certes 2006), il est dit de le faire avec:

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

ou en utilisant la size() méthode comme:

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

Ok, c'est comme ça que je fais assertLength() dans la méthode. Je serais intéressé de savoir si l'utilisation d'une telle méthode serait découragée. En outre, des réflexions sur ma méthode assertEquals()? – Armand

Questions connexes