如何访问dataProvider当前数据集的编号?

时间:2014-12-04 17:18:21

标签: php phpunit

在PHPUnit中,对于用@dataProvider修饰的测试,有没有办法找出当前使用的数据集索引(在dataProvider提供的数组中)?

2 个答案:

答案 0 :(得分:4)

方法1 - 格式化数组

您必须格式化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;
    }
}

如上所示,我将提供程序格式化为在两个方法参数中提供键和值。

方法2 - 调用私有财产

由于你的评论我已经做了一些挖掘,我发现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')"