PHPUnit测试的目录布局?

时间:2008-09-15 18:53:24

标签: php unit-testing phpunit

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

/src  
  MyClass.java

/test  
  MyClassTest.java

等等。

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

4 个答案:

答案 0 :(得分:9)

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

/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');

答案 1 :(得分:4)

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

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


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

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

答案 2 :(得分:2)

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

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

此片段可以放在自己的头文件SetupIncludePath.php中,并包含在带有'require_once'的测试文件中,这样测试套件就不会多次附加路径。

答案 3 :(得分:1)

我将测试用例放在源文件中,名称相同,但扩展名为.phpt。部署脚本只是在推送到生产时过滤掉* .phpt。