¿Es posible marcar una prueba como "esperada para fallar" con PHPUnit? Esto sería útil al realizar TDD, y desea distinguir entre las pruebas realmente fallidas y las que fallan debido a que el código asociado aún no se ha escrito.¿Cómo se indica que se espera que falle una prueba PHPUnit?
Respuesta
Creo que en estos casos, es bastante estándar simplemente marcar la prueba como omitida. Sus pruebas seguirán ejecutándose y la suite pasará, pero el corredor de prueba lo alertará de las pruebas omitidas.
http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html
Si usted quiere tener una prueba falla, pero sabía que se esperaba que su fracaso, se puede add a message to the assertion que es la salida de los resultados:
public function testExpectedToFail()
{
$this->assertTrue(FALSE, 'I knew this would happen!');
}
En los resultados:
There was 1 failure:
1) testExpectedToFail(ClassTest)
I knew this would happen!
Esto haría que el paquete fallara, lo que no parece ser el resultado deseado. –
La pregunta menciona TDD, en la que escribe pruebas fallidas contra código que no existe. –
$ this-> fail ('Sabía que esto pasaría!'); es taquigrafía para eso :). –
Realmente creo que es una mala práctica, pero puedes engañar PHPUnit de esta manera:
/**
* This test will succeed !!!
* @expectedException PHPUnit_Framework_ExpectationFailedException
*/
public function testSucceed()
{
$this->assertTrue(false);
}
más limpia:
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');
}
El código anterior funciona, pero tuve que capturar 'PHPUnit_Framework_AssertionFailedError', no' PHPUnit_Framework_ExpectationFailedException' –
Es una buena práctica si prueba una afirmación propia, por ejemplo testAssertEqual_fail: D para que pueda comprobar que sus afirmaciones personalizadas fallan como se esperaba, pero para genral use, está haciendo algo mal – aqm
El método 'correcto' de la manipulación de este es utilizar $this->markTestIncomplete()
. Esto marcará la prueba como incompleta. Volverá como se aprobó, pero mostrará el mensaje proporcionado. Ver http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html para más información.
La pregunta es sobre TDD, donde se escriben (idealmente se completan) las pruebas antes del código principal. Sin embargo, 'markTestIncomplete' es para cuando tiene una" prueba no implementada "(http://phpunit.de/manual/3.7/en/incomplete-and-skipped-tests.html comienza describiendo un método de prueba vacío para una prueba no implementada , luego explica cómo eso lleva a un éxito falso). –
El comentario por sesenta y nueve de arriba es casi perfecto para lo que estaba buscando.
El método fail() es útil para cuando establece una prueba para una excepción esperada y si no activó la excepción, desea que la prueba falle.
$this->object->triggerException();
$this->fail('The above statement was expected to trigger and exception.');
Por supuesto, el triggerException se sustituye por algo en su objeto.
- 1. PHPUnit afirman que se lanzó una excepción?
- 2. ¿Cómo escribir una prueba que espera que se genere un error en Jasmine?
- 3. PHPUnit: espera que el método signifique
- 4. ¿Cómo se manejan las pruebas de unidad/regresión que se espera que fallen durante el desarrollo?
- 5. ¿Cómo se prueba que se llamó un método dentro de una clase bajo prueba?
- 6. ¿Cómo escribir una aserción PHPUnit personalizada que se comporte como una aserción incorporada?
- 7. ¿Hay alguna manera de hacer que Eclipse ejecute una prueba JUnit varias veces hasta que falle?
- 8. ¿Cómo hacer que falle una compilación de TeamCity (tiempo de espera) si tarda demasiado?
- 9. WebBrowser.Print() espera hasta que se complete. .NET
- 10. Procedimiento espera parámetro que no se suministró
- 11. Usando PHPUnit, ¿cómo se prueba solo dos o más grupos?
- 12. hilo de espera hasta que se haya producido una condición
- 13. Cómo evitar que una secuencia de comandos bash falle cuando se establece la opción -e?
- 14. Cómo escribir una función node.js que espera a que un evento se active antes de 'regresar'?
- 15. ¿Cómo hacer que python falle con elegancia?
- 16. ¿Cómo consigo que java.concurrency.CyclicBarrier funcione como se espera?
- 17. plantillas de prueba RSpec que se queden
- 18. ¿Cómo se espera que termine el sistema Akka actor?
- 19. Cómo hacer que falle una interrupción de comando $ (shell) Haga
- 20. ¿Cómo se usa PHPUnit para probar una función si se supone que esa función matará a PHP?
- 21. PHPUnit: ¿Cómo afirmar que una clase amplía otra clase?
- 22. ¿Cómo probar automáticamente que las aplicaciones se comportan como se espera con respecto a otras actividades?
- 23. PHPUnit, superglobal vars. ¿Cómo configurar una prueba de manera que $ _SERVER y $ _GET estén configurados correctamente?
- 24. salida PHPUnit que causan excepciones Zend_Session
- 25. Android y Robotium: ¿actividad de prueba que espera un extra?
- 26. TSQL hace que el desencadenador falle silenciosamente
- 27. PHPUnit se burla de una amplia documentación
- 28. ¿Cómo se prueba para que TempData se configure en MVC 2 donde hay una redirección?
- 29. ¿Cómo se prueba una interfaz?
- 30. ¿Cómo se prueba un método de acción que devuelve JsonResult?
Supongo que será suficiente. Estaba buscando algo así como el soporte para bloques TODO en el módulo Perl's Test :: More http://perldoc.perl.org/Test/More.html#Conditional-tests que ejecutará las pruebas que se espera que fallen, e informe si (inesperadamente) tuvieron éxito. (PHPUnit parece que solo puede omitir por completo.) – mjs
Creo que Tom B responde a continuación sobre el método markTestIncomplete es mejor –
Eso no soluciona el problema. Una solución debería ser marcar la prueba como TDD, por lo que muestra 'I' si la prueba falla (ya que aún no se implementó), y lo más importante, debería fallar si la prueba pasa ya que significa que olvidamos eliminar la marca TDD. No sé cómo hacer el truco fácilmente en phpunit – Alcalyn