Scrivi precondizioni comuni per un numero elevato di casi di test unitari?

2

Ho sentito / letto che scrivere pre-condizioni comuni per un gran numero di casi di test è una cosa negativa, poiché questa dipendenza può causare un grosso numero di casi di test che falliscono se qualcosa cambia. Cosa ne pensi?

Se è così, allora qual è esattamente lo scopo del metodo setUp () in Junit che viene eseguito prima di ogni caso di test? Se lo stesso codice all'interno di setUp () viene eseguito prima di ogni caso di test, perché non può essere eseguito solo una volta prima di eseguire tutti i test case insieme?

    
posta Vinoth Kumar C M 04.03.2011 - 12:57
fonte

4 risposte

6

"what exactly is the purpose of setUp() method in Junit that runs before each test case ?"

Isolamento.

Se una risorsa condivisa, ad es. un falso deposito persistente, viene utilizzato da ogni caso di test, è necessario assicurarsi che sia nello stesso stato all'inizio di ogni test.

Altrimenti, se non inizializzi un negozio in quel modo e i tuoi test (con la convenzione di denominazione: MethodUnderTest_Condition_ExpectedBehaviour) vengono eseguiti in un ordine, ad esempio:

1: AddObject_GivenObject_AddsObjectToStore
2: GetObjectById_IdThatExistsInStore_ReturnsObject

quindi il test 2 dipende dal test 1 che aggiunge l'oggetto al negozio e non è più un test unitario corretto. Se vengono eseguiti in un ordine diverso, il codice di lavoro di GetObjectById () non supererà il test dell'unità, fornendo un falso negativo.

I buoni test unitari non hanno un ordine necessario per essere eseguiti.

"this dependency may cause large number of test cases to fail if something changes ."

Questa è una buona cosa, quelle unità testano ciascuna prova in modo diverso e falliscono in modo appropriato. Se si tratta di una piccola modifica che ha causato il fallimento, sarà una piccola correzione che farà passare nuovamente i test.

    
risposta data 04.03.2011 - 13:27
fonte
1

Penso che tu abbia bisogno di trovare un equilibrio. Se hai delle precondizioni comuni, allora sì, potresti avere test fragili, ma anche un minor numero di posti da cambiare se hai davvero bisogno di quelle precondizioni per quel set di test, e queste condizioni preliminari devono cambiare. (Valutare attentamente).

Spesso trovo che se utilizzo un framework di simulazione, potrei creare un set di base di oggetti mock e potenzialmente inserirli dove ne ho bisogno nel metodo setUp (o JUnit 4 @Before) e definire cosa fanno in i singoli test.

O se usi JUnit per l'integrazione o test più ampi, @Before / @BeforeClass può essere un momento per impostare i contenitori di jetty, configurare i database di simulazione / file di dati, prendere altre risorse necessarie e assicurarti che vengano rilasciate in @ Dopo / @AfterClass anche se i test falliscono.

Modifica: ho glazed su questo ... In JUnit 4 l' annotazione @BeforeClass indica un metodo statico che viene eseguito solo una volta prima di tutti i test in esecuzione in una classe. Non posso commentare troppo per JUnit 3, ma una rapida ricerca ha rivelato questo post del blog che è sembrato interessante.

    
risposta data 04.03.2011 - 13:18
fonte
0

Non posso commentare Junit, ma utilizzo MbUnit e utilizzo i metodi di impostazione e rimozione per l'impostazione e la riduzione dell'input delle dipendenze, in particolare UnityContainer di MS.

Penso che le precondizioni comuni siano OK con moderazione, ma troppe renderanno i test fragili.

    
risposta data 04.03.2011 - 13:09
fonte
0

L'utilizzo di vari sapori di SetUp () / TearDown () abilita l'isolamento del test. Ma è anche utile eliminare la duplicazione del codice.

Ricorda: tratta il codice di prova nello stesso modo in cui tratti il codice di produzione. Questa pratica aiuta a ridurre la duplicazione nel codice di prova, quindi usalo dove è appropriato.

Tuttavia, bisogna fare attenzione a includere solo le cose che sono veramente comuni per tutti i test nel gruppo (test fixture?) che useranno l'utility SetUp () comune. Se usato solo da alcuni di essi - aumenterai la complessità del codice di test - che è peggio della duplicazione nella mia mente ...

    
risposta data 25.06.2011 - 19:57
fonte

Leggi altre domande sui tag