簡體   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