Contesto condiviso: buono o cattivo?

4

RSpec consente agli utenti di condividere il contesto attraverso test / esempi, che ridurrebbe il numero di linee di codice nella mia app di una quantità significativa.

D'altro canto, in qualche modo legato alla questione della condivisione del codice tra i test, uno dei motivi per cui sto usando Factories and not Fixtures è perché non voglio che i test siano dipendenti dal codice memorizzato al di fuori dei test. Ryan Bates lo spiega meglio:

There’s a heavy dependency between the tests and the fixtures and we can cause the tests to fail just by changing the fixtures. External dependencies that are this strong aren’t a good idea and make the tests brittle.

Qual è la migliore pratica qui, per condividere il contesto tra i test o per avere un contesto indipendente per ogni test?

    
posta Michael Imstepf 12.05.2013 - 02:14
fonte

1 risposta

1

La fabbrica di per sé dovrebbe sembrare apolide, dal momento che dal punto di vista del chiamante, la fabbrica fa sempre la stessa cosa. Quindi, logicamente, l'unico modo in cui potresti presentare un problema di condivisione di una fabbrica è se in qualche modo hai violato questo contratto e le istanze restituite sono state in qualche modo influenzate dalle precedenti chiamate alla fabbrica.

In altre parole, una fabbrica può e di solito esegue ottimizzazioni per creare istanze, ma il chiamante non può essere influenzato da questo. Quindi nel caso semplice in cui una fabbrica crea semplicemente un'istanza e la restituisce non causerebbe problemi di cui dovresti preoccuparti con una fabbrica condivisa.

Tuttavia, mentre una fabbrica può ottimizzare questo condividendo le istanze, è inteso che gli oggetti che vengono condivisi sono (o apparentemente) senza stato. Se non lo sono e se sei fortunato, vedi immediatamente questi errori, ma se non sei fortunato, ricevi una serie di bug nel tuo programma che potrebbero non presentarsi fino a molti mesi dopo. Questo è un anti-modello e, se posso aggiungere, uno particolarmente cattivo.

Quindi, se vuoi utilizzare una fabbrica, assicurati che si adatti al modello. Se non hai a che fare con oggetti stateless, non prendere scorciatoie e creare istanze per ogni oggetto quando viene chiamato il factory per creare un'istanza e dovresti stare bene.

    
risposta data 12.05.2013 - 12:02
fonte

Leggi altre domande sui tag