2009-11-19 83 views
2

現在困擾了我一段時間。我把所有的驗證都放在服務層中。然而,當我進行單元測試時,我通常通過行動方法傳遞一切。然後進入我的服務層,包含驗證。你應該在哪裏測試你的驗證?

所以我不確定現在如果這是做到這一點的最好方法。既然他們通常說你應該測試這種方法。

那麼你們怎麼看?

回答

3

如果您通過行動請求傳遞所有內容,那麼聽起來您正在進行集成測試。

如果你正在做(單元)測試,那麼你應該測試單位。在這種情況下,您可以將所需的所有數據傳遞給服務層以模擬動作請求。

您應該模擬傳遞給服務層的對象,傳遞它,然後根據您實際返回的結果聲明預期的結果。

編輯

,正如另外,它是偉大的端至端,或集成,測試,因爲它證明(進程)的作品。

但是,您必須進行單元測試,因爲它們將測試各個組件,並且比端到端測試能夠或將要更快地使缺陷歸零。

+0

那麼我應該不測試視圖?就像我所擁有的基本上是一個方法,將在if語句中被稱爲Create(),這將做驗證並創建一些然後返回true。然後我只是回報一些東西。那麼在視圖中會有什麼需要測試的呢?就像我假設我會模擬創建方法然後因爲我沒有測試它。所以真的只有一個if語句返回true。 – chobo2 2009-11-19 20:04:14

+0

在這種情況下,我可能不會打擾測試視圖。 TDD是您需要設計自己以便最適合您的應用程序的東西。所有應用程序都沒有一個公式。決定你需要編寫測試的代碼,以便在任何時候你應該能夠運行它們並確定應用程序中其他地方的代碼更改引發的任何問題。 www.dnrtv.com由Venkat在TDD上進行了精彩的表演。我強烈建議查看它。 – griegs 2009-11-19 20:33:45

1

如果我是你,我會單獨測試包含驗證的服務層,而不是通過操作方法。

原因是我想讓我的測試代碼「一次只進行一次測試」。我對我的控制器進行了測試,測試模型和視圖的交互,而不是別的;我希望專門爲服務層和驗證進行測試。

當你在做單元測試時,mocks只是不可避免的。

+0

+1。是的,有集成測試的情況下,但很早之前,我認爲你需要做單元測試。這樣,如果您在任何地方進行更改,都會比集成測試更快。 – griegs 2009-11-19 01:32:49