Mentre le macro ASSERT_ * causano la conclusione del test case, le macro EXPECT_ * continuano la sua valutazione. Mi piacerebbe sapere quali sono i criteri per decidere se utilizzare l'uno o l'altro.Utilizzo di ASSERT e EXPECT in GoogleTest
risposta
Utilizzare ASSERT
quando è critico il test passa. (Ad esempio, se non passa, il resto del programma non funzionerà.) Utilizzare EXPECT
quando è un test che può permettersi di fallire (e ti permetterà di eseguire il tuo programma.)
La regola di pollice è: utilizzare EXPECT
a meno che non si abbia bisogno di qualcosa per funzionare per la totalità per i test, nel qual caso si dovrebbe usare ASSERT
poiché andare avanti non ha senso.
fa eco ai primer:
solito
EXPECT_*
sono preferibili, in quanto consentono più di guasti da segnalare in una prova. Tuttavia, dovresti usareASSERT_*
se non ha senso continuare quando l'asserzione in questione fallisce.
Usa EXPECT_
quando si
- voler segnalare più di un guasto nel test
Usa ASSERT_
quando
- che non ha senso continuare a quando l'asserzione fallisce
Poiché ASSERT_
interrompe immediatamente la funzione in caso di errore, è possibile saltare il codice di pulizia. Preferisci EXPECT_
come predefinito.
Controllare il seguente collegamento: Effective C++ Testing Using GoogleTest (diapositiva 23). C'è una buona guida/consiglio sull'uso di EXPECT vs ASSERT.
Oltre alle risposte precedenti ...
ASSERT_
non termina l'esecuzione del test. Viene restituito da qualsiasi funzione sia stata utilizzata. Oltre a non riuscire nel caso di test, valuta return;
e ciò significa che non può essere utilizzato in una funzione che restituisce qualcosa di diverso da void
. A meno che tu non stia bene con l'avvertimento del compilatore, cioè.
EXPECT_
fallisce il test case ma non è return;
, quindi può essere utilizzato all'interno di funzioni di qualsiasi tipo di ritorno.
Esempio standard: prima di controllare il contenuto del contenitore, ASSUMI le sue dimensioni, perché non ha senso controllare EXPECTations su elementi che potrebbero non esistere (inoltre, il tuo test si arresterebbe molto probabilmente se provassi a ottenere l'ennesimo elemento di contenitore vuoto). – chalup
Non si tratta di eseguire o meno il tuo _program_, ma se vuoi che la _test suite_ continui a funzionare. Un errore EXPECT dovrebbe significare che il codice che stai testando è difettoso. Un errore ASSERT dovrebbe significare che la suite di test stessa è difettosa o che il codice che si sta testando è così incasinato che non ha senso continuare a provare a testarlo. –