Esto no es tanto una pregunta como un intento de salvar a alguien más la hora que acabo de desperdiciar en PHPUnit.¿Qué sucede con los objetos pasados entre las pruebas PHPUnit dependientes?
Mi problema era que mi objeto simulado, cuando se usaba en una prueba dependiente, no devolvía el valor esperado. Parece que PHPUnit no conserva el mismo objeto entre las pruebas dependientes, a pesar de que la sintaxis hace que parezca.
¿Alguien sabe por qué PHPUnit hace esto? ¿Es esto un error? Cosas como esta en PHPUnit lo hacen muy frustrante de usar.
<?php
class PhpUnitTest
extends PHPUnit_Framework_TestCase
{
private $mock;
public function setUp()
{
$this->mock = $this->getMock('stdClass', array('getFoo'));
$this->mock->expects($this->any())
->method('getFoo')
->will($this->returnValue('foo'));
}
public function testMockReturnValueTwice()
{
$this->assertEquals('foo', $this->mock->getFoo());
$this->assertEquals('foo', $this->mock->getFoo());
return $this->mock;
}
/**
* @depends testMockReturnValueTwice
*/
public function testMockReturnValueInDependentTest($mock)
{
/* I would expect this next line to work, but it doesn't! */
//$this->assertEquals('foo', $mock->getFoo());
/* Instead, the $mock parameter is not the same object as
* generated by the previous test! */
$this->assertNull($mock->getFoo());
}
}
Agregue la línea de comandos de cómo invocó phpunit a medida que se encuentra con el problema. - ¿y hay alguna razón por la que haces que '$ mock' sea un miembro privado? – hakre
AFAIK phpunit ejecuta el método setUp() antes de cada prueba, por lo que restablece el valor de $ this-> mock –
Hubiera esperado que esto funcionara como lo escribiste, pensé que 'setUp()' no sería necesario @dependant tests así que realmente me sorprendió que eso también fallara ... Eso me podría haber MORDIDO si hubiera tenido un simulacro pasado a una clase que paso con @depends :) – edorian