在PHPUnit中,对于用a装饰的测试@dataProvider,有没有办法找出当前使用的数据集索引(在dataProvider提供的数组中)?
您必须格式化 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;
}
}
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,我格式化了提供程序以在两个方法参数中提供键和值。
由于您的评论,我进行了更多挖掘,并且发现了 PHPUnit 在内部使用的方法来获取失败时的 dataProvider 数组索引,该索引存储在PHPUnit_Framework_TestCase名为dataName.
我主要是 Magento 开发人员,我们使用EcomDev_PHPUnit 模块来帮助进行测试,它带有一个很好的反射助手来访问受限制的属性,因为 Magento 不是为测试而构建的,并且有很多,请参阅:https://github。 com/EcomDev/EcomDev_PHPUnit/blob/master/lib/EcomDev/Utils/Reflection.php
我找不到此属性的公共访问器,因此您必须使用反射,也许您可以打开拉取请求?
<?php
class DataProviderTest extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function test($value)
{
$key = EcomDev_Utils_Reflection::getRestrictedPropertyValue($this, 'dataName');
if ($value === 'zero') {
$this->assertEquals($key, '0', 'pass');
}
if ($value === 'two') {
$this->assertEquals($key, '1', 'fail');
}
}
public function provider()
{
return array(
array('zero'),
array('one'),
array('two')
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1489 次 |
| 最近记录: |