如何找到数据提供程序正在提供数据的测试


How to find the test a data provider is providing data to?

在使用相同@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() 
    {
        // ...
    }
}