Was ist eine ObjectMother?

8

Was ist eine ObjectMother und was sind häufige Anwendungsszenarien für dieses Muster?

    
Oded 28.05.2009, 21:35
quelle

3 Antworten

17
  

ObjectMother beginnt mit dem Factory-Muster, indem vorgefertigte testfähige Objekte über einen einfachen Methodenaufruf bereitgestellt werden. Es bewegt sich über das Reich der Fabrik hinaus   Erleichterung der Anpassung von erstellten Objekten,   Bereitstellung von Methoden, um die Objekte während der Tests zu aktualisieren, und   ggf. Löschen des Objekts nach Abschluss des Tests aus der Datenbank.

     

Einige Gründe für die Verwendung von ObjectMother:
  * Reduzierung der Code-Duplizierung in Tests, Erhöhung der Wartbarkeit von Tests   Machen Sie Testobjekte super leicht zugänglich und ermutigen Sie Entwickler, mehr Tests zu schreiben   * Jeder Test läuft mit frischen Daten.
  * Tests reinigen immer nach sich selbst.

( Ссылка )

    
David Brown 28.05.2009, 21:40
quelle
7

Siehe „ Test Data Builders: eine Alternative zu dem Objekt Mutter Muster “ für ein Argument, warum verwenden ein Testdatengenerator anstelle einer Objektmutter. Es erklärt, was beides ist.

    
cwash 28.05.2009 23:31
quelle
1

Wie bereits an anderer Stelle erwähnt, ist ObjectMother eine Factory zum Generieren von Objekten, die normalerweise (ausschließlich?) zur Verwendung in Komponententests verwenden.

Wo sie von großem Nutzen sind, ist es, komplexe Objekte zu erzeugen, bei denen die Daten für den Test keine besondere Bedeutung haben.

Wo Sie möglicherweise eine leere Instanz wie

erstellt haben %Vor%

Sie würden eine sinnvolle von der ObjectMother

verwenden %Vor%

Dies hilft in Situationen, in denen die zu testende Klasse sich auf ein vernünftiges Objekt zu verlassen beginnt.

Wenn Sie zum Beispiel eine OrderNumber-Validierung zur obigen Order-Klasse hinzugefügt haben, müssen Sie lediglich die OrderNumber für die SimpleObject-Klasse instanziieren, damit alle vorhandenen Tests bestehen und Sie sich auf das Schreiben der Validierungstests konzentrieren können.

Wenn Sie das Objekt gerade im Test instanziiert hätten, müssten Sie es zu jedem Test hinzufügen (es ist schockierend, wie oft ich Leute gesehen habe).

Natürlich könnte dies einfach in eine Methode extrahiert werden, aber wenn Sie es in eine separate Klasse einfügen, kann es zwischen mehreren Testklassen geteilt werden.

Ein weiteres empfohlenes Verhalten besteht darin, für Ihre Methoden gute beschreibende Namen zu verwenden, um die Wiederverwendung zu fördern. Es ist alles zu einfach, mit einem Objekt pro Test zu enden, was definitiv vermieden werden sollte. Es ist besser, Objekte zu generieren, die eher allgemeine als spezifische Attribute darstellen, und sie dann für Ihren Test anzupassen. Zum Beispiel ObjectMother.WealthyCustomer () und nicht ObjectMother.CustomerWith1MdollarsSharesInBigPharmaAndDrivesAPorsche () und ObjectMother.CustomerWith1MdollarsSharesInBigPharmaAndDrivesAPorscheAndAFerrari ()

    
Modan 02.10.2009 13:09
quelle

Tags und Links