【问题标题】:Directory layout for PHPUnit tests?PHPUnit 测试的目录布局?
【发布时间】:2010-09-09 02:27:08
【问题描述】:

我是一名长期从事 PHP 项目的 Java 程序员,我正在尝试启动 PHPUnit 并使其正常工作。在 Java 中进行单元测试时,通常将测试用例类和常规类放在不同的目录中,像这样 -

/src  
  MyClass.java

/test  
  MyClassTest.java

等等。

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

【问题讨论】:

标签: php unit-testing phpunit


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2014-08-31
          • 2011-12-18
          • 2013-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-21
          • 2017-07-03
          • 2011-11-22
          相关资源
          最近更新 更多