【问题标题】:Create XML dataset with the same table name as initial data set in DBUnit?创建与 DBUnit 中的初始数据集具有相同表名的 XML 数据集?
【发布时间】:2018-04-02 16:47:38
【问题描述】:

我正在尝试像这样在数据库单元中创建初始数据库状态...

public function getDataSet() {
        $primary = new \PHPUnit\DbUnit\DataSet\CompositeDataSet();
        $fixturePaths = [
            "test/Seeds/Upc/DB/UpcSelect.xml",
            "test/Seeds/Generic/DB/ProductUpcSelect.xml"
        ];
        foreach($fixturePaths as $fixturePath) {
            $dataSet = $this->createXmlDataSet($fixturePath);
            $primary->addDataSet($dataSet);
        }
        return $primary;
    }

然后在我的查询之后,我试图调用这个用户定义的函数......

protected function compareDatabase(String $seedPath, String $table) {
    $expected = $this->createFlatXmlDataSet($seedPath)->getTable($table);
    $result = $this->getConnection()->createQueryTable($table, "SELECT * FROM $table");
    $this->assertTablesEqual($expected, $result);
  }

这里的想法是我有一个初始数据库状态,运行我的查询,然后将实际表状态与代表我期望表外观的 XML 数据集进行比较。这个过程在PHPUnit's documentation for DBUnit 中有描述,但我一直抛出异常......

PHPUnit\DbUnit\InvalidArgumentException: There is already a table named upc with different table definition

测试示例...

public function testDeleteByUpc() {
    $mapper = new UpcMapper($this->getPdo());
    $mapper->deleteByUpc("someUpcCode1");
    $this->compareDatabase("test/Seeds/Upc/DB/UpcAfterDelete.xml", 'upc');
  }

我似乎在关注文档...这应该怎么做?

【问题讨论】:

    标签: unit-testing phpunit fixtures dbunit database-testing


    【解决方案1】:

    这实际上与创建第二个 XML 数据集无关。抛出此异常是因为我在 getDataSet() 方法中加载的两个固定装置都有 upc 的表定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      相关资源
      最近更新 更多