2010-05-05 6 views
7

Gibt es einen "Best Practice" - oder Defacto-Standard, wie viel von der GORM-Funktionalität sollte man in den Unit/Funktionstests testen?Wie viel von Grails GORM zu testen?

Meine Annahme ist, dass man die meisten Domain-Tests wahrscheinlich als Funktionstests durchführen sollte, damit man die volle Grails-Umgebung bekommt. Aber was testest du? Einfügen, Aktualisieren, Löschen? Teste du Constraints, obwohl sie wahrscheinlich noch gründlicher getestet wurden?

Oder nehmen Sie einfach an, dass GORM tut, was es tun soll, und zu anderen Teilen der Anwendung wechseln?

Antwort

5

Meine allgemeine Regel ist zu testen, was ich schreibe. Wenn ich also benutzerdefinierte Methoden (oder Schließungen) schreibe, teste ich diese dann einzeln. Diese Regel bedeutet auch, dass ich Constraints testen werde, seit ich die Constraints geschrieben habe. Dafür verwende ich die Methode mockForConstraintsTests() in GrailsUnitTestCase.

Ein Beispiel Einschränkungen blockieren:

static constraints = { 
     location(blank:true, nullable:true) 
     make(blank:false, nullable:false) 
     name(blank:false, nullable:false) 
     serviceTag(nullable:true) 
     purchaseDate(blank:false, nullable:false) 
     checkedDate(blank:false, nullable:false) 
     warrantyExpirationDate(nullable:true) 
     notes(blank:true, nullable:true) 
    } 

Ich würde die folgenden Einschränkungen Unit-Test haben:

void test_null_constraints_are_checked() { 
     mockForConstraintsTests(Hardware) 
     def hardware = new Hardware() 
     assertFalse hardware.validate() 

     assertEquals 4, hardware.errors.getFieldErrorCount() 
     assertEquals "nullable", hardware.errors["name"] 
     assertEquals "nullable", hardware.errors["checkedDate"] 
     assertEquals "nullable", hardware.errors["purchaseDate"] 
     assertEquals "nullable", hardware.errors["make"] 
} 

Dieses sofort alle Fehler auf meine Zwänge fangen.

Ich nicht testen speichert, erstellt, aktualisiert, löscht in der Domäne; Wenn diese fehlschlagen, habe ich größere Probleme!

+0

Würden Sie jemals Beziehungen 1-M usw. testen? –

+0

Ich kann nicht sagen, dass ich sie direkt am Gerät getestet habe. Normalerweise hole ich sie auf der Integrationsebene ab. – zentuit

1

Persönlich würde ich alle komplexen Beziehungen testen, die ich nicht 100% bequem mit dem Einrichten bin, und alle Accessoren, für die die Standardimplementierung überschrieben wird.

+0

Das klingt vernünftig, ich mache mir nur Sorgen, dass ich GORM selbst anstelle meines Codes teste. In gewisser Weise sind meine Abbildungen Teil meines Codes und ich teste das. –