PHPUnit测试套件包含路径

13

我正在使用phpunit,并且在包含路径方面遇到了一些问题,这些问题不是针对phpunit本身,而是针对我的代码和测试目录。

我的代码结构如下:

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

在我的StringCalculatorTest.php文件中,我有一个require语句:

require_once('../StringCalculator.php');

在测试文件夹中运行phpunit StringCalculatorTest.php命令可以完美运行。

但是,当我在根目录引入一个phpunit.xml配置文件之后,情况就不同了。

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

phpunit.xml

包含路径有问题。我必须将 require_once 替换为

require_once('StringCalculator.php');

如何在应用程序和测试目录之间正确设置包含路径?

3个回答

11

设置 PHP include 路径的最佳位置是在你的引导文件中。通常,你的 phpunit.xml 文件将包括一个引导属性:

最佳的地方将PHP include路径设置在启动文件中,通常情况下,你的 phpunit.xml 文件会包含一个bootstrap属性:

<phpunit backupGlobals="true"
     backupStaticAttributes="false"
     bootstrap="bootstrap.php"
     cacheTokens="true"
     colors="true"
     ... and so on ...
</phpunit>

然后在您的引导文件中,您可以设置包含路径、包含重要文件等等。

set_include_path(get_include_path() . PATH_SEPARATOR . '../my/sources');

配置文件在PHPunit文档的附录C中有详细介绍。 (链接已更新)


9

我知道这个问题已经有答案了
但是这个答案是给未来的访问者的

根据phpunit文档,您可以在您的phpunit.xml中使用includePath指令来设置您的包含路径

<php>
  <includePath>/path/to/ur/project</includePath>
</php>

3

首先,我不明白require_once('../StringCalculator.php');是如何工作的,它应该改为:require_once('../Application/StringCalculator.php');

然后,slashingweapon的答案很好,我认为这是最好的方法,但如果你不想麻烦,可以指定你的require_once从当前文件所在的目录开始:

require_once(__DIR__ . '../Application/StringCalculator.php');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接