簡體   English   中英

Visual Studio 2012中的依賴(程序)單元測試

[英]Dependent (Procedural) Unit Testing in Visual Studio 2012

在MVC4 C#網站中,我們使用單元測試來測試我們的代碼。 我們目前正在做的是創建一個模擬數據庫,然后測試每個層:

  1. 測試數據庫 - 連接,初始化,加載等。
  2. 測試訪問數據庫的代碼
  3. 測試視圖層

我希望這三個類別按順序運行,並且只有前一個類別通過才能運行。 這是正確的方法嗎? 我們這樣做的舊方法是使用依賴注入框架是一種模擬測試的奇怪方法。 我們實際上為每個數據訪問器創建了一個模擬類,這很糟糕,因為我們必須重新實現每個方法的邏輯,並且它沒有真正添加任何值,因為如果我們第一次使用邏輯錯誤,我們將會讓它成為第二個。

我希望這三個類別按順序運行,並且只有前一個類別通過才能運行。 這是正確的方法嗎?

不應該。您應該單獨測試所有內容,因此任何失敗的數據訪問代碼都應該與視圖完全無關。 因此,視圖單元測試應該以完全不同的原因失敗,因此您應該始終運行所有測試。

通常,測試應該獨立運行,不應該依賴於任何其他測試。 在我看來,視圖層仍然依賴於數據訪問代碼,但您只是抽象了下面的層。 在這種情況下,從視圖的角度來看,您正在模擬間接依賴,這使得您的單元測試比嚴格需要的更復雜。

我們這樣做的舊方法是使用依賴注入框架是一種模擬測試的奇怪方法

我不確定我是否得到了這個,但似乎你在單元測試中使用了DI容器。 這絕對是禁忌。 不要使用任何DI框架混亂您的測試。 而且沒有必要。 只需圍繞依賴注入原則設計類(將所有依賴項公開為構造函數參數),並在測試中只需手動使用假依賴項新建測試類 - 或者 - 當這會導致重復代碼時,在測試中創建工廠方法創建測試類的新實例的類。

我們實際上為每個數據訪問器創建了一個模擬類,這很糟糕

我不確定,但聽起來好像你的設計有問題。 您通常會有一個IRepository<T>接口,您可以使用多個實現,例如UserRepository : IRepository<User>OrderRepository : IRepository<Order> 在您的測試套件中,您將擁有一個通用的FakeRespository<T>InMemoryRepository<T> ,您就完成了。 這里不需要模擬很多類。

這里有兩本你應該閱讀的好書:

  1. 單元測試的藝術
  2. .NET中的依賴注入

那些書會改變你的生活。 既然你還是會閱讀,也要閱讀這本書 (與你的問題無關,但代碼也是生活改變者)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM