2009-03-04 11 views
7

Si estoy en lo correcto, SimpleTest le permitirá afirmar que se ha producido un error de PHP. Sin embargo, no puedo encontrar la manera de usarlo, según la documentación. Quiero afirmar que el objeto que pase en mi constructor es una instancia de MyOtherObjectSimpleTest: ¿Cómo afirmar que se arrojó un error de PHP?

class Object { 
    public function __construct(MyOtherObject $object) { 
     //do something with $object 
    } 
} 

//...and in my test I have... 
public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
    $this->expectError($object); 
} 

dónde voy mal?

Respuesta

13

La sugerencia de tipo arroja E_RECOVERABLE_ERROR que SimpleTest puede capturar desde PHP versión 5.2. Lo siguiente captará cualquier error que contenga el texto "debe ser una instancia de". El constructor de PatternExpectation toma un perl regex.

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    $this->expectError(new PatternExpectation("/must be an instance of/i")); 
    $object = new Object($notAnObject); 
} 
+0

No he verificado esto, así que solo asumo que esto es cierto. ¡Gracias por tu respuesta! – Andrew

2

PHP tiene errores y excepciones, que funcionan un poco diferente. Pasar un tipo incorrecto a una función type-type generará una excepción. Tienes que atrapar eso en tu caso de prueba. Ej .:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $notAnObject = 'foobar'; 
    try { 
    $object = new Object($notAnObject); 
    $this->fail("Expected exception"); 
    } catch (Exception $ex) { 
    $this->pass(); 
    } 
} 

o simplemente:

public function testConstruct_ExpectsAnInstanceOfMyOtherObject() { 
    $this->expectException(); 
    $notAnObject = 'foobar'; 
    $object = new Object($notAnObject); 
} 

Pero tenga en cuenta que esto va a detener la prueba después de la línea donde se produce la excepción.

+1

No le he dado una respuesta negativa. Pero, pensé que debería mencionar por qué creo que alguien lo habría votado negativamente: esta respuesta se refiere a "Excepciones", no a "Errores". Cuando una sugerencia de tipo selecciona el tipo incorrecto, arroja un 'Error' y no una 'Excepción'. –

1

tiene que esperar el error antes de que ocurra, entonces SimpleTest lo tragará y contará un pase, si la prueba llega al final y no hay error, entonces fallará. (hay expectError y expectException que actúan de la misma manera, para PHP (no fatales) errores y Excepciones, respectivamente.)

2

Resulta que SimpleTest en realidad no es compatible con esto. No puede detectar los errores fatales de PHP en SimpleTest. La sugerencia de tipo es excelente, excepto que no se puede probar. El tipo de pista arroja errores fatales de PHP.

+2

A partir de la versión 5.2 de PHP, SimpleTest puede capturar errores de sugerencia de tipo. Ver mi respuesta –

Cuestiones relacionadas