2010-10-12 7 views

Respuesta

21

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

+0

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

+1

Creo que Tom B responde a continuación sobre el método markTestIncomplete es mejor –

+1

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

1

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! 
+1

Esto haría que el paquete fallara, lo que no parece ser el resultado deseado. –

+1

La pregunta menciona TDD, en la que escribe pruebas fallidas contra código que no existe. –

+1

$ this-> fail ('Sabía que esto pasaría!'); es taquigrafía para eso :). –

8

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'); 
    } 
+0

El código anterior funciona, pero tuve que capturar 'PHPUnit_Framework_AssertionFailedError', no' PHPUnit_Framework_ExpectationFailedException' –

+1

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

11

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.

+2

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

1

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.

Cuestiones relacionadas