PHPUnit测试套件包含路径

时间:2012-10-29 21:32:58

标签: php unit-testing phpunit

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

我有以下代码结构:

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

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

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

从tests文件夹中运行phpunit StringCalculatorTest.php可以很好地工作。

然而,当我在根目录中引入phpunit.xml配置文件时,即

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

phpunit.xml

包含路径被拧紧。我必须将require_once替换为

require_once('StringCalculator.php');

在应用程序和测试目录之间设置包含路径的正确方法是什么?

3 个答案:

答案 0 :(得分:10)

设置PHP包含路径的最佳位置是在引导程序文件中。通常,您的phpunit.xml文件将包含引导属性:

<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文档的Appendix C中。

编辑:更新了链接

答案 1 :(得分:8)

我知道问题已经回答了 这个答案是针对未来的访客

根据phpunit文档,您可以在includePath中使用phpunit.xml指令作为包含路径

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

答案 2 :(得分:3)

首先,我不了解require_once('../StringCalculator.php');的工作原理,而应该是:require_once('../Application/StringCalculator.php');

然后,slashingweapon答案是好的,它是最好的IMO,但是如果你不想那么麻烦,你可以指定你的require_once从当前文件的目录开始:

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