我正在使用phpunit.xml.dist
文件运行测试。该文件定义了几个测试套件并指定了bootstrap.php。在这个bootstrap.php中,我正在加载所有测试的所有依赖项。
一小部分测试依赖于某些第三方库,这是可选的。这些测试都是特定测试套件的一部分。因此,我只想在指定特定测试套件时在引导文件中加载此库。
如何确定是否指定了此测试套件?这样可以确保在未加载库时可以运行大多数测试,并且可以轻松验证不应该依赖库的代码和测试确实不需要它。
我目前有以下内容。还有更好的东西吗?
if ( !in_array( '--testsuite=WikibaseDatabaseStandalone', $GLOBALS['argv'] ) ) {
require_once( __DIR__ . '/evilMediaWikiBootstrap.php' );
}
答案 0 :(得分:2)
PHPUnit bugtracker上针对测试套件特定引导程序的功能请求位于:https://github.com/sebastianbergmann/phpunit/issues/733
现在有两种选择:一种是你的,但如果你运行“所有的测试”,如果你为每一个都有特定的引导程序,那么它很好,但感觉真的是hackish并且效果不好。
我的建议是编写一个测试监听器并挂钩“startTestSuite”和“endTestSuite”。这是一种很好的维护和BC兼容的方法,只有在测试套件实际启动时才能执行代码,之后你也可以清理它。
有关如何包含测试侦听器的信息,请参阅http://phpunit.de/manual/3.7/en/extending-phpunit.html#extending-phpunit.PHPUnit_Framework_TestListener和http://phpunit.de/manual/3.7/en/appendixes.configuration.html#appendixes.configuration.test-listeners。
答案 1 :(得分:0)
处理此问题的一种常用方法是检查是否安装了必需的依赖项,如果没有,则运行
$this->markTestAsSkipped('lib not installed');
跳过也可能发生在测试的setUp()
阶段。
最后,您可以向测试类和/或测试函数添加@group
注释,以便选择是否从命令行运行测试(使用--group [names...]
参数)
最后,在ZendFramework中使用的一个选项是仅添加在更大的测试套件中运行子集的TestSuite - 代码。有一个能够
的例子c)运行测试,以供(例如)使用