在使用相同@dataProvider
的两个或多个测试的PHPUnit测试用例中,我希望提供程序找出它向哪个测试提供数据。我已经用debug_backtrace()
完成了这个,但是感觉不对。PHPUnit是否提供了另一种更标准的方式来实现这一点?如果是,怎么做?
<?php
class MyTest extends PHPUnit_Framework_TestCase {
/** @dataProvider dataProvider */
public function testA () {}
/** @dataProvider dataProvider */
public function testB () {}
public function dataProvider () {
$trace = debug_backtrace(false, 3);
$caller = $trace[2]['args'][2];
// $caller === 'testA' or $caller === 'testB'
}
}
创建调用基数据提供程序的单个数据提供程序。这样你就知道调用者是谁,并且仍然可以有一个单一的入口点。
<?php
class MyTest extends PHPUnit_Framework_TestCase {
/** @dataProvider dataProviderA */
public function testA() {}
/** @dataProvider dataProviderB */
public function testB() {}
public function dataProviderA()
{
$dataProvider = $this->getProviderData();
// Caller is A ...
// Mutate base provider data as necessary...
}
public function dataProviderB()
{
$dataProvider = $this->getProviderData();
// Caller is B ...
// Mutate base provider data as necessary...
}
public function getProviderData()
{
// ...
}
}