我是一名长期从事 PHP 项目的 Java 程序员,我正在尝试让 PHPUnit 启动并运行。在 Java 中进行单元测试时,通常将测试用例类和常规类放入单独的目录中,如下所示 -

/src  
  MyClass.java

/test  
  MyClassTest.java

等等。

使用 PHPUnit 进行单元测试时,是否通常遵循相同的目录结构,或者是否有更好的方法来布局测试类?到目前为止,我能让“include("MyClass.php")”语句正常工作的唯一方法是将测试类包含在同一目录中,但我不想在推送时包含测试类生产。

有帮助吗?

解决方案

我认为将文件分开是个好主意。我通常使用这样的文件夹结构:

/myapp/src/        <- my classes
/myapp/tests/       <- my tests for the classes
/myapp/public/      <- document root

在您的情况下,为了将类包含在测试文件中,为什么不将整个路径传递给 include 方法呢?

include('/path/to/myapp/src/MyClass.php');

或者

include('../src/MyClass.php');

其他提示

您需要修改PHP的include_path,以便它知道在哪里可以找到MyClass.php include() 它在你的单元测试中。

您可以在测试文件的顶部有类似的内容(在包含之前):


set_include_path(get_include_path() . PATH_SEPARATOR . "../src");

这会附加您的 src 目录到包含路径中,并且应该允许您将真实代码与测试代码分开。

根据我的经验,布莱恩·菲利普斯的回答还不够深入。当 PHPUnit 运行测试时,您不知道当前目录是什么。因此,您需要在 set_include_path() 表达式中引用测试类文件的绝对路径。像这样:

set_include_path(get_include_path() . PATH_SEPARATOR . 
                        dirname(__FILE__) . "/../src");

该片段可以放置在其自己的头文件 SetupIncludePath.php 中,并包含在带有“require_once”的测试文件中,以便测试套件不会多次附加路径。

我将测试用例放在源文件的旁边,该文件具有相同的名称,但扩展名为 .phpt。当部署脚本推送到生产环境时,部署脚本只是过滤掉 *.phpt。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top