我们在我们的项目中使用PHPUnit,并使用PHPunit.xml来确保关闭backupGlobals.
为了进一步确保包含路径被设置并且自动加载是活动的,我们也级联我们的测试引导.也就是说,每个测试和alltests-suite都有一个require_once(__ DIR__.’/../bootstrap.PHP’);在顶部,一直到基本文件夹级别,它显然读取require_once(__ DIR__./bootstrap.PHP’);并且实际的引导文件位于.
基本上,我们的测试是自主的.您可以在任何文件夹和任何* Test.PHP本身中调用任何AllTests.PHP,它们将以正确的配置运行.
除了’稍等片刻.’
这是真的,如果我们强制我们的开发人员使用PHPunit –configuration = path / to / PHPunit.xml或者它们在PHPunit.xml的文件夹中(以便PHPUnit将其从当前工作目录中拉出,当它是执行).
偶尔,这使得很难确定为什么一台开发机器的测试正在崩溃,以及为什么它们在另一台机器上运行.只需忘记,引导不是我们需要具有相同测试环境的唯一的事情.请记住,由于您尝试过不能忘记引导程序,因为它在测试本身,忘记其他设置,尤其是通常可选的(如果您在PHPunit.xml的文件夹中),则会自动拉),很容易.
其实这是发生了几次.
题
有没有一种方法可以提供在运行的测试文件中使用哪个PHPunit.xml,例如在我们方便的无处不在的引导文件中,而不是事先将其提供给PHPUnit,就是通过命令行开关或通过它的目录?
粗略的一瞥代码表明答案是没有 – 配置好,真正似乎加载测试文件甚至被拉:
[PHPUnit/TextUI/Command.PHP] ... if (isset($this->arguments['configuration'])) { $configuration = PHPUnit_Util_Configuration::getInstance( $this->arguments['configuration'] ); $PHPunit = $configuration->getPHPUnitConfiguration(); ...
这样做有一定意义,因为配置可以包含测试白名单或黑名单.
真的,在测试引导本身加载测试过滤器是没有意义的,所以这是Windows的潜在配置的一半,但PHPUnit的实际行为标志…
[sample of part of our PHPunit.xml] <PHPunit backupGlobals="false" backupStaticAttributes="false" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" SyntaxCheck="false" processIsolation="false" colors="true">
可能除了“颜色”之外,还会使我成为测试本身应该在一定程度上决定的东西.
安慰奖…
诚然,现在我很高兴只要知道我是否可以从引导文件中教导PHPUnit backupGlobals =“false”,如果有人知道某种方式.
(如果没有结果,我将追求的实际答案可能是将PHPunit.xml复制到所有子文件夹中,我想避免这种解决方案,因为它创建了冗余副本,如果我们选择更改设置…是啊,哎哟!)
更长的故事 – 通过改变开发者的习惯,更好地解决了这种问题.
这是我们做的:
>所有开发人员总是从测试根目录运行测试,该目录具有唯一的PHPunit.xml,其中包含所有必要的配置,包括引导,它设置一个类自动加载程序.
>我们没有这样的测试套件,测试使用目录分组,没有AllTests.PHP在任何地方,因为它不是必需的. PHPUnit可以使用目录的名称,并在其中运行所有测试.
>它仍然可以运行任何单个测试通过给它一个路径或整个测试(通过给目录的路径).它只需要从测试根目录完成,或者它不工作.
这样做意味着放弃从任何目录启动PHPUnit的自由,但说实话,我根本不觉得这是一个亏损.