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