在我成功初始化提供程序中的属性mock
之后(我这样做是因为我想将属性作为参数传递,如果它未在提供程序中初始化,则会因为prop为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')
);
}
}
答案 0 :(得分:2)
我认为你想知道为什么这种情况发生了。 PHPUnit的documentation实际上解释了这一点:
请注意
在调用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')
);
}
}