2

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

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

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

我目前有以下。有更好的吗?

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

2 回答 2

2

测试套件特定引导程序的 PHPUnit bugtracker 功能请求在这里:https ://github.com/sebastianbergmann/phpunit/issues/733

现在有两种选择:一种是你的,它很好,但如果你运行“所有测试”,如果你对它们中的每一个都有特定的引导程序,它会感觉非常糟糕并且效果不佳。

我的建议是编写一个测试监听器并连接到“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了解如何包含测试侦听器。

于 2013-05-28T10:41:33.393 回答
0

处理此问题的常用方法之一是检查是否安装了所需的依赖项,如果没有,则运行

$this->markTestAsSkipped('lib not installed');

这种跳过也可能发生在setUp()测试阶段。

最后,您可以@group向测试类和/或测试函数添加注释,以选择是否从命令行运行测试(使用--group [names...]参数)。

最后,在 ZendFramework 中也使用了一个选项,即只添加在更大的测试套件集中运行子集的测试套件 - 在代码中。有一个例子可以

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

    使用 APC 进行缓存

于 2013-05-25T00:27:26.293 回答