我正在尝试使用 PHPUnit 为 php 应用程序实现类似 Django 的测试实用程序。类似 Django,我的意思是在运行第一个测试之前从主数据库创建一个单独的测试数据库,并在运行最后一个测试后将其删除。即使一次运行许多测试用例,测试数据库也只需要创建一次。
为此,我采取了以下方法——
我定义了一个自定义测试套件类,以便我可以在其设置和拆卸方法中编写用于创建和删除数据库的代码,然后使用此类来运行测试,如下所示
$ phpunit MyTestSuite
MyTestSuite 定义了一个静态方法,名为suite
我刚刚使用的地方glob
并将测试添加到测试套件中,如下所示
public static function suite() {
$suite = new MyTestSuite();
foreach (glob('./tests/*Test.php') as $tc) {
require_once $tc;
$suite->addTestSuite(basename($tc, '.php'));
}
return $suite;
}
所有测试用例类都从以下子类扩展而来PHPUnit_Framework_TestCase
该类的 setup 和teardown 方法负责从 json 夹具文件加载和清除初始数据。
现在作为没有。测试不断增加,我一次只需要运行选定的测试。但由于我已经使用测试套件加载测试,因此无法使用 --filter 选项。
这让我觉得这种做法可能不是正确的。
所以我的问题是,在运行第一个测试之前和运行最后一个测试之后执行某些操作的正确方法是什么,无论 PHPUnit 如何找到它们?
PS:我没有使用 PHPUnit_Extensions_Database_TestCase,而是我自己创建、填充和删除数据库的实现。
我最近遇到了一些需要解决同样问题的事情。我试过埃多利亚人的回答 https://stackoverflow.com/a/10897030/390977与__destruct
自定义类的方法,但它似乎是在每次测试结束时运行,而不是在all tests.
我没有在 bootstrap.php 文件中使用特殊的类,而是使用了 PHP 的register_shutdown_function http://php.net/manual/en/function.register-shutdown-function.php在我的所有测试结束后处理数据库清理的函数,它似乎工作得很好。
这是我的 bootstrap.php 文件中的示例
register_shutdown_function(function(){
some_db_cleanup_methods();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)