当使用 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/