我正在测试函数是否正确地将数据添加到数据库,但我希望在测试完成后删除测试数据。如果测试失败,它将在失败时退出,并且永远不会有机会删除测试行。
这是唯一一个命中db的测试,所以我真的不想在tearDown()方法中做任何事情。
我正在测试$ obj-> save()类型方法,该方法保存从平面文件解析的数据。
答案 0 :(得分:3)
如果您的数据库支持事务,您可以在测试开始时发出start_transaction。如果测试失败(导致程序退出),将执行隐式回滚并撤消更改。如果测试成功,则发出显式回滚。
另一个选择是将断言包装在try-catch语句中 - 这可以防止测试停止(以及捕获屏幕截图等其他自动功能),并且您可以从该点开始执行任何操作。
答案 1 :(得分:2)
您应该使用单独的数据库进行开发/生产和测试。它们在结构上是相同的,但每次执行测试时,都会删除测试数据库并从某些数据夹具中恢复它。关键是,通过这种方式,您可以绝对确保每次运行测试时数据库都包含相同的数据集。所以删除测试数据没什么大不了的。
答案 2 :(得分:2)
您是否使用建议的方法通过Database Testcase Extension进行数据库测试?
基本上,如果测试失败(如果没有使PHPUnit退出的错误,则读取),应该没有问题,因为数据库是在测试用例启动时播种的:
PHPUnit中的默认实现将自动截断指定的所有表,然后按照数据集指定的顺序插入数据集中的数据。
因此不需要手动执行此操作。即使出现错误,PHPUnit也会在下次运行时清除该表。