12

使用 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');

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

4

3 回答 3

11

设置 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 文档的附录 C中。

编辑:链接已更新

于 2012-10-29T21:53:48.010 回答
8

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

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

<php>
  <includePath>/path/to/ur/project</includePath>
</php>
于 2013-10-25T07:28:11.793 回答
3

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

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

require_once(__DIR__ . '../Application/StringCalculator.php');
于 2012-10-30T08:39:06.813 回答