![](/img/trans.png)
[英]Filesystem/directory layout for unit and functional tests with 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.