2011-06-18 45 views
8

我是一般的單元測試新手,但希望在MVC模式下實現它(使用PHP)。現在我不知道如何解決這個問題。如何對MVC類進行單元測試?

單元測試是否應該嵌入到框架中,或者我們只是創建一個名爲tests的新文件夾幷包含所有必需的類和單元測試?

總之,如果有一個模型M,它也與框架本身有一些耦合。因此爲了測試模型,我應該在單元測試中包含框架的某些部分嗎?

是否有一些很好的代碼示例說明如何完成此操作。

回答

7

是否應單元測試被內置到框架,或者我們只是創建一個新的文件夾,名爲測試,幷包括所有必要的類和單元測試每一個?

你應該爲它創建一個單獨的文件夾。出於性能和調試的原因,將測試生成代碼混淆通常不是一個好主意。

因此,爲了測試模型,我應該在單元測試中包含框架的某些部分嗎?

越少越好。單元測試應該只需要很少的依賴關係。如果類A取決於B,則應該模擬B以確保如果B失敗,則不會使A失敗。

單元測試(正確完成)的主要優點是它可以讓您輕鬆找出問題所在。如果A由於其B依賴項而失敗,則首先請看A,,然後B。同樣,如果B取決於CC發生故障,您必須查看AB,然後C。這幾乎毀了單元測試的最大優點之一。如果所有測試都正確完成,C中的故障將不會導致其他任何地方發生故障,而不是在C中,因此您將有一個類來查找以解決問題。

要真正使你的代碼錯誤驗證,您可以結合使用單元測試PHP assertions

$return = $this->addOne($some_param); 
assert('$return == $some_param + 1'); 

順便說一句,有單元測試MVC之間沒有差別,如不是單元測試一般。

1

單元測試應該是MVC框架的一部分。例如,看看CodeIgniter用戶指南的Unit Testing Class章節。

1

是否應單元測試被內置到 框架,或者我們只是創建一個新的文件夾 稱爲測試

如果您使用的是第三方框架,它通常會包括一些單元測試幫手,但是你會想把你自己的測試類放到一個單獨的文件夾中,這樣(例如)你可以推出一個你的軟件發行版,但不包含它們。

包括所有必要的類和單元測試每一個?

您通常每個應用程序類都有一個測試類。所以,如果你有一個模型類M,你將有一個測試類M_Test(或者你採用的任何命名約定)。

如果你還不熟悉PHPUnit,你會想要抓住它並閱讀他們的文檔。

相關問題