PHPUnit测试的目录布局?
时间:2020-03-05 18:54:14 来源:igfitidea点击:
我是从事PHP项目的长期Java程序员,并且正在尝试使PHPUnit正常工作。使用Java进行单元测试时,通常将测试用例类和常规类放在单独的目录中,如下所示-
/src MyClass.java /test MyClassTest.java
等等。
使用PHPUnit进行单元测试时,遵循相同的目录结构是常见的做法,还是有更好的方法来布置测试类?到目前为止,我可以使" include(" MyClass.php")"语句正常工作的唯一方法是将测试类包含在同一目录中,但是当我按下时,我不想包含测试类生产。
解决方案
回答
我们需要修改PHP的include_path,以便在单元测试中对include()进行MyClass.php时可以知道在哪里可以找到MyClass.php。
在测试文件的顶部(包含之前),我们可能会有类似的内容:
set_include_path(get_include_path() . PATH_SEPARATOR . "../src");
这会将src目录添加到包含路径上,并应允许我们将实际代码与测试代码分开。
回答
我认为将文件分开存放是个好主意。我通常使用这样的文件夹结构:
/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');
回答
我将测试用例放在源的旁边,并放在一个具有相同名称但扩展名为.phpt的文件中。部署脚本在推入生产时仅过滤掉* .phpt。
回答
根据我的经验,布莱恩·菲利普斯(Brian Phillips)的回答还远远不够。当PHPUnit运行测试时,我们不知道当前目录是什么。因此,我们需要在set_include_path()表达式中引用测试类文件的绝对路径。像这样:
set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . "/../src");
可以将此片段放在其自己的头文件SetupIncludePath.php中,并使用" require_once"将其包含在测试文件中,以便测试套件不会多次追加路径。