2010-08-28 85 views
15

顯然,I don't understand unit testing。這很好,考慮到我以前從未做過。我正在開始一個新項目,並希望從一開始就將單元測試納入其中,所以我期待學習。單元測試應該涵蓋什麼,不應該包含哪些內容?

我總是把單元測試等同於代碼覆蓋率,認爲你應該有單元測試覆蓋你的應用程序中的每個函數/方法,但顯然情況並非如此,我完全誤解了這個概念。

所以,

  • 什麼樣的功能,從單元測試中受益?
  • 什麼樣的功能不應該被單元測試?

回答

1

根據TDD(測試驅動開發)的方法應該測試每個公共功能,在該功能執行的每一條路徑。

+0

但是像控制器和路由器(即前端控制器)是公開的,我不知道單元測試如何覆蓋它們。這是我在與我有關的問題中問到的問題,以及這個問題的理由。是否應該修改爲「每個返回值的公共函數」之類的東西,還是有辦法讓單元測試覆蓋這些實例? – AgentConundrum 2010-08-28 17:45:44

+0

控制器和路由器也應該進行測試。這不是理論,而是每天在實踐中完成。一些框架,即Rails,比其他框架更容易。控制器的示例測試:http://guides.rubyonrails.org/testing.html#functional-tests-for-your-controllers 路由示例測試:http://guides.rubyonrails.org/testing.html#testing-路線 – qertoip 2010-08-28 18:02:07

0

單元測試是一種工具,並且有許多方法可以使用它。這裏是我的做法:

我寫我的單元測試服務和DAO簽名,而不是對DTO和實體類型太多。大部分價值類型都會間接測試。 equals和hashCode方法在DTO和實體類型中應該被測試。

我使用純粹的單元測試和模擬的依賴關係,並使用完整的後端進行集成測試。爲了適當的覆蓋範圍,需要兩者都有

+0

對不起,我有點失落(「DAO簽名」,「DTOs」)。你能澄清一點嗎? – AgentConundrum 2010-08-28 17:46:42

+0

* DAO = http://en.wikipedia.org/wiki/Data_access_object(爲持久化抽象服務) * DTO = http://en.wikipedia.org/wiki/Data_transfer_object(值對象) – 2010-08-28 17:56:45

2

我沒有一個完整的答案(我很想聽聽別人誰做,說實話),但至少能折騰出幾個點......

  1. 你已經是在通過從測試中首先推動開發的正確軌道。對現有應用程序進行改裝單元測試是困難的,而且很少提供真正的好處(反而經常會給代碼覆蓋率帶來錯誤的感覺)。適當的TDD始終是一種深謀遠慮,絕不是事後的想法。
  2. 我不會打擾測試私人功能。各種代碼覆蓋工具可能會說它沒有經過測試,但如果它是私有的,那麼它的功能應該通過測試公共方法來測試。私有方法是內部的,而不是API的一部分,除了類(甚至是測試)之外,任何東西都不應該知道或關心它們,因爲如果該類的實現發生更改,它們可以輕鬆更改。
  3. 關注代碼的暴露API。根據你的接口編寫測試,而不是針對你的類。這些類本身稍​​後會針對測試進行實施和測試。
  4. 最後,非常重要的是,研究你在做什麼以及它的好處。編寫單元測試不是一個棕色和服務的過程。一個人通過簡單地編寫測試就無法獲得良好的測試覆蓋率,但是通過了解TDD以及如何實施測試。這將需要練習。我會給出的一個建議是做一個適當的TDD項目,並嘗試對現有項目進行改造。我們可以整天告訴對方前者比後者好,但通過這兩種方式你可以真正辨別差異並更好地理解爲什麼更好。這將帶給你的不僅僅是寫測試,更多的是TDD的專家和它真正帶給桌面的東西。任何人都可以編寫測試,但除非他們真正瞭解正在發生的事情,否則他們往往只是在浪費時間。
+0

@David:你再次!我可以告訴我要從你那裏學到很多東西。兩件事:1)我已經瞭解了#1 /#4,只是通過閱讀大量內容,以及使用類似概念的模糊經歷 - 這與QA的原因相同需要部門 - 開發人員對代碼知之甚多,並會改進測試以通過代碼。 2)回到你爲我也回答的mvc問題,你如何調整「單元測試公共方法」與控制器和路由器/前端控制器之類的東西?這些對象具有公共接口,但我不知道如何將單元測試適用於它們。 – AgentConundrum 2010-08-28 17:54:04

+0

@AgentConundrum:我又來了? :) MVC中的控制器比WebForms中的代碼隱藏最大的好處之一是它們可以很容易地進行單元測試。看看這裏:http://www.lostechies.com/blogs/chrismissal/archive/2010/02/05/unit-testing-simple-asp-net-mvc-controllers.aspx和http://msdn.microsoft .com/en-us/magazine/dd942838.aspx和http://www.asp.net/mvc/tutorials/creating-unit-tests-for-asp-net-mvc-applications-vb「上下文」的應用程序可以被模擬,所以你只需要測試這些操作返回正確的視圖。嘲笑依賴關係驗證它們是否被正確調用。 – David 2010-08-28 18:10:05

+0

(對不起,如果我在這裏假設.NET,這只是我的經驗,無論使用什麼工具,這些概念都可以普遍應用)。 – David 2010-08-28 18:11:16

相關問題