如果断言失败,如何让PHPUnit做一些事情

时间:2010-10-20 15:00:49

标签: php sql phpunit

我正在测试函数是否正确地将数据添加到数据库,但我希望在测试完成后删除测试数据。如果测试失败,它将在失败时退出,并且永远不会有机会删除测试行。

这是唯一一个命中db的测试,所以我真的不想在tearDown()方法中做任何事情。

我正在测试$ obj-> save()类型方法,该方法保存从平面文件解析的数据。

3 个答案:

答案 0 :(得分:3)

如果您的数据库支持事务,您可以在测试开始时发出start_transaction。如果测试失败(导致程序退出),将执行隐式回滚并撤消更改。如果测试成功,则发出显式回滚。

另一个选择是将断言包装在try-catch语句中 - 这可以防止测试停止(以及捕获屏幕截图等其他自动功能),并且您可以从该点开始执行任何操作。

答案 1 :(得分:2)

您应该使用单独的数据库进行开发/生产和测试。它们在结构上是相同的,但每次执行测试时,都会删除测试数据库并从某些数据夹具中恢复它。关键是,通过这种方式,您可以绝对确保每次运行测试时数据库都包含相同的数据集。所以删除测试数据没什么大不了的。

答案 2 :(得分:2)

您是否使用建议的方法通过Database Testcase Extension进行数据库测试?

基本上,如果测试失败(如果没有使PHPUnit退出的错误,则读取),应该没有问题,因为数据库是在测试用例启动时播种的:

  

PHPUnit中的默认实现将自动截断指定的所有表,然后按照数据集指定的顺序插入数据集中的数据。

因此不需要手动执行此操作。即使出现错误,PHPUnit也会在下次运行时清除该表。