Macht ein framework wie Factory Girl existieren für Java?
Factory Girl ist ein handliches framework rails zum einfachen erstellen von Instanzen von Modellen zum testen.
Aus der Factory Girl-Startseite:
factory_girl ermöglicht es Ihnen, schnell zu definieren, Prototypen für jedes Ihrer Modelle und Fragen für Instanzen mit Eigenschaften, die wichtig sind, um den test zu hand.
Ein Beispiel (auch von der Startseite):
Factory.sequence :email do |n|
"somebody#{n}@example.com"
end
# Let's define a factory for the User model. The class name is guessed from the
# factory name.
Factory.define :user do |f|
# These properties are set statically, and are evaluated when the factory is
# defined.
f.first_name 'John'
f.last_name 'Doe'
f.admin false
# This property is set "lazily." The block will be called whenever an
# instance is generated, and the return value of the block is used as the
# value for the attribute.
f.email { Factory.next(:email) }
end
wenn ich einen Benutzer können einfach anrufen
test_user = Factory(:user, :admin => true)
die Ausbeute wird ein Benutzer mit den angegebenen Eigenschaften, die in der Fabrik Prototyp außer für die admin-Eigenschaft, die ich explizit angegeben. Beachten Sie auch, dass die E-Mail-Fabrik-Methode wird der Ertrag einer anderen E-Mail jedes mal, wenn es aufgerufen wird.
Ich denke, es sollte ziemlich einfach zu implementieren etwas ähnliches für Java, aber ich will nicht das Rad neu zu erfinden.
P. S: ich weiss über beide JMock und EasyMoc, aber ich spreche nicht von ein mocking-framework hier.
- Können Sie uns ein Beispiel geben von FactoryGirl tut, ohne uns mit zu gehen und Lesen Sie über es irgendwo anders?
- Es war eine für Python bis die frameworker die Rechte der Gewerkschaften begann gettin in den Weg!
- Beanmother github.com/keepcosmos/beanmother, was Sie wollen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Bibliothek möglich, dies zu tun ist Usurpator.
Jedoch, wenn Sie wollen, geben Sie die Eigenschaften der Objekte, die Sie erstellen, dann Javas statische Typisierung macht einen Rahmen überflüssig. Müssten Sie geben Sie die property-Namen als strings, so dass der Rahmen Aussehen könnte, bis Eigenschaftenaccessoren mit Reflexion oder Java Bean-introspection. Das würde Umgestaltung viel schwieriger.
Es ist viel einfacher nur neue Objekte und deren Methoden aufzurufen. Wenn Sie vermeiden möchten, viel boilerplate-code in tests, die Testdaten-Generator Muster können helfen.
Ich sah auch für ein Java-äquivalent zu Factory Girl, aber nichts gefunden, wie es. Stattdessen habe ich eine Lösung, die von Grund auf neu. Eine Fabrik für die Erstellung der Modelle in Java: Modell Citizen.
Inspiriert von Factory Girl, verwendet er Feld Anmerkungen zum festlegen von Standardeinstellungen für ein Modell, ein einfaches Beispiel aus dem wiki:
Dies würde die Blaupause für das Auto-Modell. Dies ist registriert in der ModelFactory, als neue Instanzen erstellt werden können, wie folgt:
Können Sie überschreiben die Werte, die von der Auto-Modell, indem Sie übergeben eine Instanz von Auto statt von der Klasse und Einstellung der Werte als notwendig:
Den wiki komplexere Beispiele (wie mit @Zugeordnet) und details für ein paar mehr Glocken und Pfeifen.
Ich weiß, das ist nicht genau das, was du suchst...
Ich die letzten, die ich geschrieben habe einige code, der mit Reflexion zu füllen, eine Bohnen-Werte. Die grundlegende Idee ist, alle setter und rufen jeweils mit einem dummy-Wert. Meine version legen alle Strings als Namen für das Feld setName heißen würde, mit "name", stellen Sie alle Ganzzahlen wie 1, booleans auf true usw.
Ich dieses dann in Verbindung mit den mustern, die ähnlich zu Objekt-Mutter-und Test-Daten-generator.
Es ein guter start für die test-Daten, und alle Felder, die erforderlichen spezifischen Werte können explizit festgelegt werden, als Teil des Tests.
Hoffe, das hilft.
Kam ich hier mit der gleichen Frage und benötigt für Daten-Generierung tool für meine integration tests. Ich beschloss, die Herausforderung anzunehmen, mit groovigen, das ist meine Sprache der Wahl für die tests wegen seiner Kompaktheit und Leistung geltend machen.
Ich habe nur geschrieben, einen kleinen Helfer https://gist.github.com/pgaertig/9502960 genannt FactoryGrill ;), die Option zum schreiben von Daten, die Skripte wie unten.
oben ist äquivalent zu:
Können Sie mehr tun mit Groovy:
Es ist nicht Fabrik, wirklich, weil Fabriken sind ziemlich gerade nach vorne in Groovy mit map constructor oder expandos.
Referenzen und andere Sachen von FactoryGirl ist zur Zeit nicht verfügbar, da oben erreicht man nur mit ~30LOC. Aber wenn es ein Interesse in meine Lösung, die ich hinzufügen, stellen Sie ein eigenes Projekt auf Github.
Wenn Ihr Modell-Objekte sind einfach, es gibt keinen Grund, den Rahmen zu schaffen, so verwenden Sie einfach 'new' - operator.
Wenn Sie mit komplexen Modell (komplexe Beziehungen), dann können Sie nutzen spring, binden Sie Sie zusammen (auch in der test-Szenarien, die Sie verwenden können, Frühjahr)