PHPUnit:是否可以将包含相同表的数据集添加到复合数据集中?

标签 php unit-testing phpunit

根据PHPUnit文档(http://www.phpunit.de/manual/3.7/en/database.html#understanding-datasets-and-datatables),我们可以将包含相同表的数据集添加到复合数据中设置,以及“当多个数据集包含相同的表时,行将按指定的顺序附加”。但是,在 PHPUnit_Extensions_Database_DataSet_CompositeDataSet::addDataSet() 方法中,它具有以下代码:

    foreach ($dataSet->getTableNames() as $tableName)
    {
        if (in_array($tableName, $this->getTableNames()))
        {
            throw new InvalidArgumentException("DataSet contains a table that already exists: {$tableName}");
        }
    }

    $this->dataSets[] = $dataSet;

我遗漏了什么或者文档不正确吗?

最佳答案

为了添加涉及同一表的多个数据集,您需要扩展 CompositeDataSet 类并将 addDataSet 方法重写为以下内容:

   public function addDataSet(PHPUnit_Extensions_Database_DataSet_IDataSet $dataSet)
    {
        foreach ($dataSet->getTableNames() as $tableName)
        {
            if (in_array($tableName, $this->getTableNames()))
            {
                $this->getTable($tableName)->addTableRows($dataSet->getTable($tableName));
                return;
            }
        }

        $this->dataSets[] = $dataSet;
    }

关于PHPUnit:是否可以将包含相同表的数据集添加到复合数据集中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12046965/

相关文章:

php - RegEx:安全、快速地删除非字母 UTF-8

php - 在使用 DOMDocument 函数处理之前修复 PHP 中格式错误的 XML

php - CodeIgniter:在 Controller 中加载 Controller

php - 将 PHPUnit 从 4.8 升级到 5.5

php - 使用 Composer 和 autoload.php 在 PHPUnit 中自动加载类

PHPMyAdmin 单点登录身份验证无限重定向循环

java - 即使所有字段都相同,地址相等也会失败

python - Teamcity 消息 unittest 在 Python 2 中看不到测试

.net - 如何找到所有可能直接或间接调用给定方法的单元测试? (。网)

laravel-5 - Laravel 5.6 模拟 Guzzle 响应