Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何找到数据提供者向其提供数据的测试?_Php_Reflection_Phpunit - Fatal编程技术网

Php 如何找到数据提供者向其提供数据的测试?

Php 如何找到数据提供者向其提供数据的测试?,php,reflection,phpunit,Php,Reflection,Phpunit,在一个PHPUnit测试用例中,有两个或多个测试使用同一个测试,我想让提供者知道它向哪个测试提供数据。我已经完成了这个使用,但这感觉是错误的。PHPUnit是否提供了另一种更标准的方法来实现这一点?如果是,怎么办 <?php class MyTest extends \PHPUnit_Framework_TestCase { /** @dataProvider dataProvider */ public function testA () {} /** @d

在一个PHPUnit测试用例中,有两个或多个测试使用同一个测试,我想让提供者知道它向哪个测试提供数据。我已经完成了这个使用,但这感觉是错误的。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() 
    {
        // ...
    }
}

你为什么需要这个?如果不同的测试需要不同的数据,请使用不同的提供程序。如果数据之间有很多相似之处,请将它们提取到另一种方法中。我想自动化测试数据管理,我需要一个单一的入口点来从文件中检索数据。数据提供程序不会停留在testcase的一部分,而是驻留在一个trait中,该trait设计用于根据testcase和正在执行的实际测试从文件系统获取测试数据。