在PHPUnit中,对于用@dataProvider
修饰的测试,有没有办法找出当前使用的数据集索引(在dataProvider提供的数组中)?
答案 0 :(得分:4)
您必须格式化dataProvider方法以提供数组索引($key)
以及$value
:
<?php
class DataProviderTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testMethod($key, $value)
{
if ($key === 1) {
$this->assertEquals('two', $value, 'pass');
}
if ($key === 2) {
$this->assertEquals('two', $value, 'fail');
}
}
public function provider()
{
$data = array('one', 'two', 'three');
$holder = array();
foreach ($data as $key => $value) {
$holder[] = array($key, $value);
}
return $holder;
}
}
如上所示,我将提供程序格式化为在两个方法参数中提供键和值。
由于你的评论我已经做了一些挖掘,我发现PHPUnit在内部使用的方法在失败时获取dataProvider数组索引,索引存储在测试用例类的私有属性中({{1} })名为PHPUnit_Framework_TestCase
。
我主要是一个Magento开发人员,我们使用EcomDev_PHPUnit module来帮助测试,它带有一个很好的反射帮助器来访问受限制的属性,因为Magento不是为测试而构建的,并且有很多它们,请参阅: https://github.com/EcomDev/EcomDev_PHPUnit/blob/master/lib/EcomDev/Utils/Reflection.php
我找不到此属性的公共访问器,因此您必须使用反射,也许您可以打开拉取请求?
dataName
答案 1 :(得分:0)
还有...
/**
* Gets the data set description of a TestCase.
*
* @param bool $includeData
*
* @return string
*/
public function getDataSetAsString($includeData = true)
这将返回类似(例如)
string(51) " with data set "Empty set with no columns from set""
或
string(87) " with data set "Empty set with no columns from set" (array(), array(), 0, '\n\n\n\n\n')"