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.
- 1. duplicazione Node.js `affermazioni assert` in spec` expect`
- 2. Utilizzo di istruzioni condizionali all'interno di 'expect'
- 3. CMake + GoogleTest
- 4. Expect item in array
- 5. ASSERT vs. ATLASSERT vs. assert
- 6. Qualsiasi differenza tra "send_user" e "puts" in Expect
- 7. Java Assert utilizzo dichiarazione, esame di certificazione 1Z0-851
- 8. Differenza tra XCTAssert e assert in Swift
- 9. Differenza tra "precondizione" e "assert" in swift?
- 10. googletest: come configurare?
- 11. RSpec 'Expect' Sintassi e attributo Idiomatico spec
- 12. GoogleTest vs CppUnit: I fatti
- 13. Assert IEnumerables
- 14. ExpectedException Assert
- 15. Jasmine array.length expect
- 16. Confronta i contenitori con GoogleTest
- 17. GoogleTest: come saltare un test?
- 18. Expect: 100-continue
- 19. Che cos'è "assert" in JavaScript?
- 20. Utilizzo di googletest per eseguire unit-test per più moduli testati contemporaneamente
- 21. Quando usare assert() in Matlab?
- 22. numero Assert di chiamate ricorsive in Sinon
- 23. Stampa messaggio su expect() asser failure
- 24. Sto fraintendendo l'uso di assert()?
- 25. come $ expect_out funziona in TCL/EXPECT?
- 26. Script Bash/Expect per SSH
- 27. Assert, verifica e altri comandi in Selenium WebDriver utilizzando C#
- 28. Java assert rotto?
- 29. Arrange Act Assert Alternatives
- 30. Assert con messaggio dinamico?
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. –