2010-10-20 86 views
3

我测试的是一个正常运行将数据添加到一个数据库,但我想测试完成后取出的测试数据。如果测试失败,则在失败时退出,永远不会有机会删除测试行。如何有PHPUnit的做一些事情,如果断言失败

就这么打分贝唯一的测试,所以我真的不希望在拆解()方法做任何事情。

我测试一个$ obj->保存()类型的方法,节省了从平面文件解析数据。

+0

而不是弯曲PHPUnit,也许你的测试会在CREATE TEMPORARY TABLE上工作? (假设你没有开发数据库。) – mario 2010-10-20 15:10:23

+0

然后,我将不得不弯曲实际的PHP代码,我正在测试$ obj-> save()类型的方法。我结束了调用save(),查询数据库并将结果存储在一个变量中,删除测试数据,然后最终做出断言。我觉得phpunit有一些东西可以让你在测试用例失败时运行一些代码,但是在我的生活中我无法在文档中找到它。 – 2010-10-20 15:16:47

回答

2

您应该使用单独的数据库进行开发/生产和测试。结构相同,但每次执行测试时,都会丢弃测试数据库并从某些数据固件中恢复测试数据。关键是,这样你可以绝对确保你的数据库每次运行测试时都包含相同的数据集。因此删除测试数据并不是什么大不了的事

+0

我同意这是应该如何完成的,我无法想象说服我的办公室开始这样做。 – 2010-10-20 15:22:57

2

您是否正在通过Database Testcase Extension数据库测试的建议的方法?

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

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

所以应该没有必要做手工。即使出现错误,PHPUnit也会在下次运行时清除表格。

2

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

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

相关问题