2012-03-23 114 views
0

我正在嘗試使用PHPUnit和舊的基於Web的舊版代碼來測試我們的源代碼樹,試圖儘可能少地做出改變來開始。一旦測試完成,我可以更改庫函數以便更好地使用,並進行更好的單元測試。但是,我需要做的測試才能讓我改變它。在PHPUnit中需要本地文件

問題:我們在應用程序的許多項目中共享庫代碼,但它們都共享一個通用目錄結構。當網站運行時,當我們需要庫中的文件時,本地目錄可用。

考慮一下:

APP1 
APP2 
Library 
Library/COMM 
Library/UTIL 
... 

當你啓動應用程序,你點要麼APP1或APP2爲不同的應用。他們有共同的代碼(消息傳遞,數據庫訪問等)。在圖書館。問題是,庫中的函數需要特殊的參數才能工作,因爲它們現在已被編碼。這些庫只需要('Config.php');因爲它可以在APP1或APP2中找到(它們都具有特定於應用程序的設置),並且Web服務器使用APP1或APP2作爲庫文件require()'d時的目錄。

儘管如此,但試圖在PHPUnit中運行代碼時失敗。我的問題是如何包含Config.php文件,而不必在測試到位之前更改舊版代碼。

我知道這是錯誤的格式,但這是我繼承的。

我不能簡單地要求('../../ APP1/Config.php');因爲這兩個應用程序共享此庫。

任何建議,非常感謝。

注意:我們正在嘗試在我們開始編寫測試時測試庫和所有項目,因此不確定include_path是否可以解決它。我正在考慮針對每個應用程序使用不同的PHPUnit.xml.dist文件,但是現在由於企業影響立即測試所有應用程序而試圖避免這種情況。

回答

1

從phpunit.xml(< phpunit bootstrap =「./bootstrap.php」> ...)和cli(--bootstrap ./bootstrap.php)您可以指定一個引導文件。在那個文件中,你可以做這個包含你正在做的事情。

作爲建議的話,在說明測試遺留代碼庫時,不要從單元測試開始。你的第一個目標應該是「實現某種自動化測試」。對於大多數人來說,這將是系統測試。這是整個測試堆棧/站點。一個常用的工具是Selenium

這仍然不是一個小任務。你將不得不做的事情是「如何讓我的系統處於一致的狀態」。您可能需要做的第一件事是自動導入和清空數據庫中的測試數據。一旦你可以做到這一點,你將能夠可靠地運行自動化測試。你還需要得到很多其他的東西才能保持一致,日期和時間就是一個很好的例子。

我的觀點是,從經驗出發,單元測試不會給你你需要證明自動測試值得付出努力的價值。

祝你好運!

+0

我看到了引導程序,但內部代碼調用了這些包括,因爲路徑在目錄中無效。當你在Web服務器上運行時,當前目錄仍然存在,所以需要('Config。PHP');將在APP1或APP2下找到該文件,該文件已啓動。我不知道你提到的bootstrap是如何幫助你的,因爲基本代碼在執行時需要包含這些文件。我想我會需要不同的文件(bootstrap和phpunit.xml)。謝謝您的幫助。 – 2012-03-26 13:24:55

+0

我不確定你是否試圖同時測試這兩個應用程序,所以這裏有一些建議。如果應用程序包含Config.php,則將代碼更改爲「require(__ DIR __。'/ Config.php')」。如果您無法更改應用程序,並且一次只測試一個應用程序;在引導程序中運行chdir()函數作爲您正在測試的應用程序的公用文件夾。如果您無法更改該代碼,並且您正在同時測試這兩個應用程序。爲每個代碼庫創建測試套件。在每個應用程序的測試套件中調用chdir()。這確實意味着您將始終需要通過測試套件來運行。 – SamHennessy 2012-03-26 17:24:46

+0

謝謝。這就是我基本上決定要做的事情。我將不得不編寫單獨的測試套件和引導程序,以便從頭開始。然後我將改變Config.php的加載方式。我們正在嘗試對這兩個應用程序進行測試,因爲我們先進行了較低級別的測試,因此可以測試這兩個應用程序。 Selenium可能會被用來測試與UI的交互。 – 2012-03-28 13:39:35