在PHPUnit引导程序文件中测试套件信息

时间:2013-05-22 16:58:21

标签: phpunit

我正在使用phpunit.xml.dist文件运行测试。该文件定义了几个测试套件并指定了bootstrap.php。在这个bootstrap.php中,我正在加载所有测试的所有依赖项。

一小部分测试依赖于某些第三方库,这是可选的。这些测试都是特定测试套件的一部分。因此,我只想在指定特定测试套件时在引导文件中加载此库。

如何确定是否指定了此测试套件?这样可以确保在未加载库时可以运行大多数测试,并且可以轻松验证不应该依赖库的代码和测试确实不需要它。

我目前有以下内容。还有更好的东西吗?

if ( !in_array( '--testsuite=WikibaseDatabaseStandalone', $GLOBALS['argv'] ) ) {
    require_once( __DIR__ . '/evilMediaWikiBootstrap.php' );
}

2 个答案:

答案 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_TestListenerhttp://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 - 代码。有一个能够

的例子
  • a)关闭,
  • b)如果未加载扩展程序,则关闭,或
  • c)运行测试,以供(例如)使用

    caching with APC