Это не столько вопрос, сколько попытка сэкономить кому-то еще час, который я только что потратил на PHPUnit.
Моя проблема заключалась в том, что мой фиктивный объект при использовании в зависимом тесте не возвращал ожидаемого значения. Кажется, что PHPUnit не сохраняет один и тот же объект между зависимыми тестами, хотя синтаксис делает его похожим на него.
Кто-нибудь знает, почему PHPUnit делает это? Это ошибка? Подобные вещи в PHPUnit делают его очень неудобным в использовании.
<?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() );
}
}