在成功初始化提供程序中的属性mock
(我这样做是因为我想将该属性作为参数传递,如果它没有在提供程序中初始化,则会因为道具为null而发生错误)并将其传递给测试后,我遇到了一个问题:该属性被覆盖为null。
class Test extends 'PHPUnit_Framework_TestCase
{
protected $mock;
/**
* @param $arg List of objects from DB
*
* @dataProvider providerTest
*/
public function test($arg)
{
var_dump($this->mock) // ---> NULL
}
public function providerTest()
{
$this->mock = $this->getMockBuilder(Currency::class)
->disableOriginalConstructor()
->getMock();
var_dump($this->mock) // -----> OBJECT
return array(
array('argument')
);
}
}
我想您想知道为什么会发生这种情况。PHPUnit的文档实际上解释了这一点:
票据
所有数据提供程序都在调用setUpBeforeClass静态方法和第一次调用setUp方法之前执行。因此,您无法访问在数据提供程序中创建的任何变量。这是PHPUnit能够计算测试总数所必需的。
因此,您应该将MockObject
的创建移动到setUp()
方法中,或者直接移动到使用数据提供程序的测试方法中:
class Test extends 'PHPUnit_Framework_TestCase
{
protected $mock;
protected function setUp()
{
$this->mock = $this->getMockBuilder(Currency::class)
->disableOriginalConstructor()
->getMock();
}
/**
* @param $arg List of objects from DB
*
* @dataProvider providerTest
*/
public function test($arg)
{
var_dump($this->mock) // ---> MockObject
}
public function providerTest()
{
return array(
array('argument')
);
}
}