繁体   English   中英

PHPUnit 测试的目录布局?

[英]Directory layout for PHPUnit tests?

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

/src  
  MyClass.java

/test  
  MyClassTest.java

等等。

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

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

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

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

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

或者

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

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

你可以在你的测试文件的顶部有这样的东西(在你的包含之前):


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

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

根据我的经验,Brian Phillips 的回答远远不够 go 。 当您的测试由 PHPUnit 运行时,您不知道当前目录是什么。 因此,您需要在 set_include_path() 表达式中引用测试 class 文件的绝对路径。 像这样:

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

这个片段可以放在它自己的 header 文件 SetupIncludePath.php 并包含在带有“require_once”的测试文件中,这样测试套件就不会多次 Z9516DFB15F51C7EE19A4D46B8DZC0 路径。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM