2008-09-15 83 views
13

我是一位長期從事PHP項目的Java程序員,我試圖讓PHPUnit開始工作。當Java單元測試,這是共同把測試用例類和普通班到不同的目錄,這樣的 -PHPUnit測試的目錄佈局?

/src 
    MyClass.java 

/test 
    MyClassTest.java 

等。

當使用PHPUnit進行單元測試時,是否遵循相同的目錄結構,還是有更好的佈局測試類的方法?到目前爲止,我可以讓「include(」MyClass.php「)」語句正常工作的唯一方法是將測試類包含在同一個目錄中,但是當我推入時,我不想包含測試類生產。

+1

交叉引用:[PHPUnit組織測試的最佳實踐(2011年11月)](http://stackoverflow.com/q/8313283/367456) – hakre 2013-08-12 17:34:55

回答

9

我認爲這是一個好主意,保持你的文件分開。我通常使用一個文件夾結構是這樣的:

/myapp/src/  <- my classes 
/myapp/tests/  <- my tests for the classes 
/myapp/public/  <- document root 

在你的情況下,包括在您的測試文件中的類,爲什麼不通過整個路徑包括方法?

include('/path/to/myapp/src/MyClass.php'); 

include('../src/MyClass.php'); 
4

您需要修改PHP的include_path,以便它在您的單元測試中知道在哪裏找到MyClass.php。

你可能有這樣的事情在你的測試文件的頂部(前你有):

 

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

這追加的src目錄到包含路徑,應該讓你保持你的真正的代碼分開你的測試代碼。

1

我把我的測試案例旁邊的來源與名稱相同但.phpt擴展名的文件。部署腳本在推送到生產時簡單地過濾* .phpt。

2

根據我的經驗,Brian Phillips的回答並不夠深入。當您的測試由PHPUnit運行時,您不知道當前目錄是什麼。所以你需要在你的set_include_path()表達式中引用測試類文件的絕對路徑。就像這樣:

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

這個片段可以放在自己的頭文件SetupIncludePath.php幷包含在測試文件以「require_once」,讓測試套件不要多次追加路徑。