php - 如何获取dataProvider当前数据集的编号?

标签 php phpunit

在 PHPUnit 中,对于用 @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;
    }
}

正如您在上面看到的,我格式化了提供程序以在两个方法参数中提供键和值。

方法二——调用私有(private)属性

因为你的评论我做了更多的挖掘,我发现了 PHPUnit 在内部使用的方法来获取失败时的 dataProvider 数组索引,该索引存储在测试用例类的私有(private)属性中 (PHPUnit_Framework_TestCase ) 称为 dataName

我主要是一名 Magento 开发人员,我们使用 EcomDev_PHPUnit module为了帮助测试,它带有一个很好的反射助手来访问受限制的属性,因为 Magento 不是为测试而构建的并且有很多这样的属性,请参阅:https://github.com/EcomDev/EcomDev_PHPUnit/blob/master/lib/EcomDev/Utils/Reflection.php

我找不到这个属性的公共(public)访问器,所以你必须使用反射,也许你可以打开一个拉取请求?

<?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')
        );
    }
}

关于php - 如何获取dataProvider当前数据集的编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27300035/

相关文章:

php - 找不到 Laravel 测试模拟对象方法

php - 单引号不解析

javascript - 在 javascript (laravel) 中获取 php 数组

php - 列计数与第 1 行错误的值计数不匹配

php - Laravel 5.2 单元测试错误:BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::make()

PhpStorm 中的 PHPUnit 测试 : Cannot open file

javascript - 打印二维阵列

PHP 将行插入 MySQL - 哪种方法更合适?

php - Zend Framework 2 phpunit 测试带有连接的表

拉维尔 |测试