È possibile contrassegnare un test come "previsto per non riuscire" con PHPUnit? Ciò sarebbe utile quando si esegue TDD e si desidera distinguere tra test effettivamente falliti e test che si verificano falliti perché il codice associato non è ancora stato scritto.Come indicare che un test PHPUnit dovrebbe fallire?
risposta
Penso che in questi casi, è abbastanza normale contrassegnare semplicemente il test come saltato. I test continueranno a essere eseguiti e la suite passerà, ma il test runner ti avviserà dei test saltati.
http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html
Se si vuole avere una prova di fallire, ma sappiamo che il suo fallimento è stato previsto, è possibile add a message to the assertion che sarà in uscita nei risultati:
public function testExpectedToFail()
{
$this->assertTrue(FALSE, 'I knew this would happen!');
}
Nei risultati:
There was 1 failure:
1) testExpectedToFail(ClassTest)
I knew this would happen!
Questo potrebbe causare il fallimento della suite, che non sembra essere il risultato desiderato. –
La domanda menzionata TDD, in cui si scrivono test di errore contro il codice che non esiste. –
$ this-> fail ('Sapevo che sarebbe successo!'); è una scorciatoia per quello :) –
Penso davvero che sia una cattiva pratica, tuttavia puoi ingannare PHPUnit in questo modo:
/**
* This test will succeed !!!
* @expectedException PHPUnit_Framework_ExpectationFailedException
*/
public function testSucceed()
{
$this->assertTrue(false);
}
più pulito:
public function testFailingTest() {
try {
$this->assertTrue(false);
} catch (PHPUnit_Framework_ExpectationFailedException $ex) {
// As expected the assertion failed, silently return
return;
}
// The assertion did not fail, make the test fail
$this->fail('This test did not fail as expected');
}
Il codice sopra funziona, ma dovevo prendere 'PHPUnit_Framework_AssertionFailedError', non' PHPUnit_Framework_ExpectationFailedException' –
è una buona pratica se in realtà stai testando un'affermazione come self, ad esempio testAssertEqual_fail: D così puoi controllare che le tue asserzioni personalizzate falliscano come previsto, ma per genral usa, stai facendo qualcosa di sbagliato – aqm
Procedimento 'corretta' di manipolazione di questo è quello di utilizzare $this->markTestIncomplete()
. Questo segnerà il test come incompleto. Tornerà come passato, ma mostrerà il messaggio fornito. Vedere http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html per ulteriori informazioni.
La domanda riguarda TDD, dove scrivi (idealmente completi) i test prima del codice principale. Tuttavia, 'markTestIncomplete' è per quando si ha un" test non implementato "(http://phpunit.de/manual/3.7/en/incomplete-and-skipped-tests.html inizia descrivendo un metodo di test vuoto per un test non implementato , quindi spiega come ciò porti ad un falso successo). –
Il commento del sessantanove sopra è quasi perfetto per quello che stavo cercando.
Il metodo fail() è utile quando si imposta un test per un'eccezione prevista e se non ha attivato l'eccezione si desidera che il test abbia esito negativo.
$this->object->triggerException();
$this->fail('The above statement was expected to trigger and exception.');
Ovviamente il triggerException viene sostituito da qualcosa nel proprio oggetto.
- 1. Il regex Javascript dovrebbe passare .test() ma sembra fallire - perché?
- 2. come scrivere test django destinato a fallire?
- 3. Test del codice che utilizza get_class con PHPUnit oggetti fittizi
- 4. Come test STDIN in PHPUnit
- 5. quale dovrebbe JAVA_HOME indicare, JDK o JRE
- 6. Test phpunit con database
- 7. PHPUnit - test autoloader class
- 8. Test database PHPUnit
- 9. echo in phpunit test
- 10. test error_log con PHPUnit
- 11. Come forzare un test di RSpec per fallire?
- 12. Come eseguire un singolo test phpUnit in un processo separato?
- 13. Come saltare i test in PHPunit?
- 14. Come eseguo tutti i miei test PHPUnit?
- 15. Come dovrei indicare che un test non è stato ancora scritto in Python?
- 16. Test PHPUnit per uscita JSON
- 17. Come testare un servizio Web in PHPUnit attraverso più test?
- 18. Come trovare il motivo per un test rischioso in PHPUnit
- 19. si dovrebbe usare phpunit o lime con symfony?
- 20. Come fallire un unipest python in setUpClass?
- 21. In Python, come posso indicare che sto sovrascrivendo un metodo?
- 22. come indicare nel codice se stiamo eseguendo da un test .net test .net
- 23. Come posso rendere OSX's rand() fallire il test dello spettro?
- 24. Domanda Test PHPUnit - Come testare la mia classe
- 25. Non fallire la creazione di gradle se un test fallisce con il gradle-android-test-plugin
- 26. phpunit: Come faccio a passare i valori tra i test?
- 27. Test della funzione mt_rand con PHPUnit
- 28. Errore Netbeans-PHPUnit "Nessun test eseguito"
- 29. test se matrice contiene valore utilizzando PHPUnit
- 30. test phpunit con viste in copertura
Credo che lo farò. Stavo cercando qualcosa di simile al supporto per i blocchi TODO in Perl's Test :: Più modulo http://perldoc.perl.org/Test/More.html#Conditional-tests che eseguirà i test che si prevede che falliscano e segnalerà se loro (inaspettatamente) ci sono riusciti. (PHPUnit sembra essere in grado di saltare completamente.) – mjs
Penso che Tom B risponda sotto al metodo markTestIncomplete sia migliore –
Questo non fa il trucco. Una soluzione dovrebbe essere quella di contrassegnare il test come TDD, quindi visualizza 'I' se il test fallisce (come non ancora implementato) e, cosa più importante, dovrebbe fallire se il test passa perché significa che abbiamo dimenticato di rimuovere il marchio TDD. Non so come fare il trucco facilmente in phpunit – Alcalyn