2014-04-28 2 views
11

Ich sehe nicht, warum factory_boy gegenüber dem Erstellen von ORM/Modell Instanzen direkt in Django Tests bevorzugt wird. Und die factory_boy-Website erklärt die Vorteile der Verwendung wenig.Warum ist factory_boy der Verwendung des ORM direkt in Tests überlegen?

Es macht Sinn, als Alternative zu den Lampen, die nur schwer zu verwalten, sind langsam, etc. etc.

Aber, warum nicht nur Modellinstanzen nach Bedarf für die Tests erstellen?

Wenn factory_boy komplett ersetzt Schreiben in die db, dann gut, ich denke, es wäre sehr sehr nützlich in diesem Fall, aber die Fabrik Junge erstellt Django Modell Instanzen interagieren immer noch mit der Datenbank.

Ein weiterer möglicher Vorteil ist die Unterstützung von Sequenzen, aber es ist nicht schwer, Sequenzen/Beispieldaten zu erstellen, ohne dass ein Factory Boy benötigt wird.

Alles in allem sehe ich praktisch keine Vorteile bei der Verwendung von Factory Boy, vs Erstellen von Objekten/Modell Instanzen direkt.

Ich hoffe, ich vermisse etwas ganz offensichtlich!

Antwort

9

Ja, Sie können Ihre Testdaten direkt mit django ORM vorbereiten. Aber es gibt Vorteile speziell Fabriken und factory_boy verwenden, hier sind einige, dass ich mich erinnere und Verwendung:

  • Ihr Modell Fabriken definiert sind in einem schönen, sauberen und gut lesbare Art und Weise:

    class CasesFactory(factory.Factory): 
        FACTORY_FOR = models.Case 
    
        number = factory.Sequence(lambda n: '1021-{0}'.format(n)) 
        create_date = datetime.datetime.now() 
    
  • Ein weiterer Vorteil dieses klassenbasierten Ansatzes ist die Möglichkeit, SubFactories

  • auch Sie können einfach Fabriken für verschiedene Arten von Beziehungen zu definieren: ForeignKey, revers e ForeignKey, ManyToMany (documentation)

  • ordentlich DjangoModelFactory Klasse
  • Sequence s (wie Sie erwähnt haben) hilft die Daten mehr "dynamisch" zu machen. Stellen Sie sich vor, es selbst zu handhaben.
  • mute_signals Dekorateur - manchmal beim Testen Sie das Signal nicht wollen
  • zu versendenden

Grundsätzlich factory_boy ist es zum Erzeugen von Testdatenschreib „Helfer“ Funktionen zu vermeiden. Stattdessen bietet es eine nette und einfach zu bedienende Benutzeroberfläche.

Fragen Sie sich: Warum das Rad neu erfinden, gibt es ein Werkzeug speziell für den Job?

Siehe auch:

+1

Eine andere wirklich grundlegende ein Wert hinzufügen: Sie Standardwerte angeben, können Sie für Ihre Tests zu verwenden, ohne sie als Standardwerte auf dem tatsächlichen Modell mit selbst.Das ist großartig, wenn Sie wirklich wichtige Attribute haben, die einen Fehler enthalten sollten, wenn sie nicht explizit in der eigentlichen App angegeben werden (so dass Sie keinen Modellstandard haben können), aber Sie interessieren sich nicht wirklich für sie in einigen Ihrer Tests Fälle. –

Verwandte Themen