2014-04-28 11 views
11

Non vedo perché factory_boy sia preferito rispetto alla creazione di istanze ORM/modello direttamente nei test di Django. E il sito web factory_boy fa ben poco per spiegare i vantaggi del suo utilizzo.Perché factory_boy è superiore all'utilizzo dell'ORM direttamente nei test?

Ha senso come alternativa alle lampade, che sono difficili da gestire, sono lenti, ecc ecc

Ma, perché non creare istanze modello come necessario per i test?

Se factory_boy ha completamente sostituito la scrittura sul db, quindi bene, penso che sarebbe molto utile in questo caso, ma il factory boy creato istanze di modello django interagisce ancora con il database.

Un altro potenziale vantaggio è il supporto per le sequenze, ma non è difficile creare sequenze/dati di esempio senza la necessità di factory boy.

Nel complesso non vedo alcun vantaggio nell'utilizzo di factory boy, rispetto alla creazione diretta di istanze di oggetti/modelli.

Spero che mi sfugga qualcosa di assolutamente evidente!

risposta

9

Sì, è possibile preparare i dati di test utilizzando direttamente django ORM. Ma ci sono vantaggi dell'utilizzo di fabbriche e factory_boy specifico, ecco alcuni dei che mi ricordo e l'uso:

  • vostre fabbriche modello sono definiti in maniera piacevole, pulito e leggibile:

    class CasesFactory(factory.Factory): 
        FACTORY_FOR = models.Case 
    
        number = factory.Sequence(lambda n: '1021-{0}'.format(n)) 
        create_date = datetime.datetime.now() 
    
  • un altro vantaggio di questo approccio basato sulla classe è la possibilità di creare SubFactories

  • inoltre è possibile definire facilmente le fabbriche per diversi tipi di relazioni: ForeignKey, al contrario e ForeignKey, ManyToMany (documentation)

  • ordinata DjangoModelFactory classe
  • Sequence s (come hai detto) aiuta a rendere i dati più "dinamico". Immagina di gestirlo da solo.
  • mute_signals decoratore - a volte durante la prova non si desidera che il segnale da inviato

In sostanza, factory_boy è lì per evitare la scrittura di funzioni "helper" per la generazione di dati di test. Invece, introduce un'interfaccia piacevole e facile da usare.

Chiediti: perché reinventare la ruota c'è uno strumento specifico per il lavoro?

Vedi anche:

+1

Un altro veramente di base la pena di aggiungere: è possibile specificare i valori di default da utilizzare per i test senza averli come impostazioni predefinite sul modello attuale si.Questo è grandioso se si dispone di Attributi veramente importanti che dovrebbero essere ignorati se non sono esplicitamente forniti nell'app reale (quindi non si può avere un modello predefinito), ma non ci si preoccupa veramente di loro in alcuni dei test casi. –

Problemi correlati