2010-04-02 19 views
30

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

33

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 usare ASSERT_* se non ha senso continuare quando l'asserzione in questione fallisce.

+7

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

+1

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. –

14

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.

0

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.