php - 如何使用 PHPUnit 插入特定于测试用例的数据库行

标签 php unit-testing phpunit

当使用 PHPUnit 测试依赖于数据库的类时,getDataSet() 方法提供数据作为整个测试套件的测试夹具。这很好,但是如何为特定测试提供数据呢?这并不罕见,尤其是在使用最小化数据集时,对于每个测试都需要在所有测试使用的公共(public)数据之上的不同数据库数据。我知道 PDO 对象可用,在我们的例子中,应用程序的 native DB 对象也可用(意思是,我们可以运行原始查询或使用应用程序中的其他功能),但最好有一种方法来插入数据这是由 PHPUnit 的数据集容器驱动的,因此所有测试数据都以相同的方式处理,以提高清晰度并简化维护。

有什么办法可以做到这一点吗?

最佳答案

你可以遵循这样的卑鄙伎俩:

protected function getDataSet()
{
    if (in_array($this->getName(), array('testA', 'testB', '...'))) {
        return $this->createXMLDataSet(__DIR__ . '/_fixtures/fistureA.xml');
    }

    return $this->createXMLDataSet(__DIR__ . '/_fixtures/fixtureB.xml');
}

小提示:$this->getName()返回当前测试方法名

另一种方法是在测试开始时重新运行设置操作:

public function testA()
{
    $this->getDatabaseTester()->setDataSet($this->createFlatXMLDataSet(__DIR__ . '/_fixtures/fixtureForTestA.xml'));
    $this->getDatabaseTester()->onSetUp();

    /* your test code */
}

关于php - 如何使用 PHPUnit 插入特定于测试用例的数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385317/

相关文章:

php - 在postman中使用phpcurl上传文件到Nextcloud但上传的文件是空的

unit-testing - 运行ctest时如何找到错误所在

PHPUnit 在 MacOS Big Sur 上总是输出 "No tests executed!"

PHP 连接 MySQL

php - 给定错误 URL 时 cURL 连接到本地主机

java - JMockit 多个异常作为方法调用的结果

java - @RefreshScope 似乎忽略了 Mockito 的模拟

php - 使用 PHPUnit 模拟未在被测类中指定的以编程方式确定的方法

php - 测试完全使用另一个对象方法的方法

php - 如何在 PHP 中的 select 查询 where 语句中使用数组?