Ho costruito il mio framework esistente utilizzando Jfunc che fornisce una funzionalità per continuare l'exezione anche quando uno dei test nel caso di test fallisce. Jfunc usa il framework junit 3.x. Ma ora stiamo migrando a junit4 quindi non posso più usare Jfunc e l'ho sostituito con junit 4.10 jar.
Ora il problema è che abbiamo utilizzato ampiamente jfunc nel nostro framework e con junit 4 vogliamo rendere il nostro codice continuare l'esecuzione anche quando uno degli asseriti fallisce in un caso di test.
Qualcuno ha qualche suggerimento/idea per questo, so che in junit i test devono essere più atomici, vale a dire uno asserire per test case, ma non possiamo farlo nel nostro framework per qualche motivo.Esecuzione di test continui in junit4 anche quando uno degli asseriti fallisce
risposta
È possibile eseguire questa operazione utilizzando una regola ErrorCollector.
Per usarlo, prima aggiungere la regola come un campo nella classe di test:
public class MyTest {
@Rule
public ErrorCollector collector = new ErrorCollector();
//...tests...
}
Quindi sostituire il vostro afferma con chiamate a collector.checkThat(...)
.
ad es.
Uso anche ErrorCollector ma uso anche assertThat e inserirli in un blocco catch try.
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
@Rule
public ErrorCollector collector = new ErrorCollector();
@Test
public void calculatedValueShouldEqualExpected() {
try {
assertThat(calculatedValue(), is(expected));
} catch (Throwable t) {
collector.addError(t);
// do something
}
}
Utilizzare i blocchi try/finally. Questo ha funzionato nel mio caso:
...
try {
assert(...)
} finally {
// code to be executed after assert
}
...
Ti rendi conto che questa domanda è stata postata 2 anni fa e c'è già una risposta accettata? –
@ TheJuniorProgrammer solo una nota generale, questo sito non riguarda solo le risposte accettate. Il punto è aiutare gli utenti che cercano risposte a trovare una soluzione a un problema.A volte ci sono diversi approcci per risolvere un problema, e a volte ciò che funziona per una persona potrebbe non funzionare altrettanto bene per un'altra. – nomistic
@nomistic fine, abbastanza vero. –
È anche possibile utilizzare assertj - soft assertion
@Test
public void testCollectErrors(){
SoftAssertions softly = new SoftAssertions();
softly.assertThat(true).isFalse();
softly.assertThat(false).isTrue();
// Don't forget to call SoftAssertions global verification !
softly.assertAll();
}
esistono anche altri modi per usarlo senza manualmente richiamare softly.assertAll();
- 1. Esecuzione di un singolo test JUnit4 in Eclipse con Maven
- 2. Esecuzione di JUnit4 Classi di test nell'ordine specificato
- 3. Come posso rendere MSTest.exe restituire uno 0 anche se un test fallisce?
- 4. test continui con gradle
- 5. Come si eseguono test continui in .NET?
- 6. JUnit4 - AssertionFailedError: Nessun test trovato
- 7. Esecuzione di una suite di test JUnit4 in Maven utilizzando il plug-in maven-failsafe
- 8. Junit4: esecuzione di una suite di metodi di prova particolari
- 9. TeamCity - Arresta il build quando un test fallisce
- 10. Esegui qualche azione quando il test di Spock fallisce
- 11. Test Android Junit4 sul thread dell'interfaccia utente
- 12. PHPUnit: visualizzazione forzata dei valori asseriti
- 13. RSpec fallisce il test
- 14. Perché questo test CollectionAssert.AreEquivalent() fallisce?
- 15. Android - Esecuzione di un'attività in background ogni 15 minuti, anche quando l'applicazione non è in esecuzione
- 16. JUnit4: Test di un hook di arresto è chiamato
- 17. CasperJs + jenkins: quando un test fallisce, come recuperare tutte le informazioni su questo test
- 18. JUnit4 salta test in base alle annotazioni java personalizzate
- 19. Come posso creare una suite di test JUnit4 configurabile?
- 20. TeamCity corsa costruire passaggi anche quando i test falliscono
- 21. Continuare determinate attività in grunt anche se si fallisce
- 22. Utilizzo di Spring JUnit4 e JMock insieme
- 23. JUnit4 esegue tutti i test in un pacchetto specifico utilizzando una suite di test
- 24. Esecuzione test JUnit in Eclipse apre il pannello della console
- 25. assertRaises fallisce, anche la richiamabile solleva l'eccezione desiderata (pitone, UNITEST)
- 26. Abilita PCNTL in Ubuntu PHP - test fallisce
- 27. esecuzione di uno script Python da PHP
- 28. Cosa succede quando modifico uno script mentre è in esecuzione?
- 29. Come chiamare ipdb quando un test fallisce nel test di django?
- 30. Spring JUnit4 dilemma di cablaggio manuale/automatico
Grazie per la risposta chris. Ha funzionato e ha continuato dopo il primo errore (ad es. Collector.checkThat (10, CoreMatchers.equalTo (11))). Ma il problema è che voglio che contrassegni il test come fallito anche se uno dei controlli fallisce. Attualmente dopo aver eseguito il test precedente, il test viene contrassegnato come superato. Voglio che fallisca e mostri lo stacktrace sulla linea di errore (qualcosa di simile a quando una asserzione fallisce). – user85
È strano. Ho appena provato il codice che ho scritto nella mia risposta, e ha funzionato come previsto. Il test fallisce e stampa la traccia di stack di ogni asserzione fallita. Ecco il codice di prova completo e l'output che ho ottenuto, eseguendo il test da IntelliJ: https://gist.github.com/2419626 –
Oh ... il mio male, ho appena dimenticato di aggiungere la regola e ha causato tutto il caos ..... scusa per la confusione e grazie mille per il post. – user85