簡體   English   中英

在C#.NET中測試靜態類和方法

[英]Testing static classes and methods in C# .NET

我對單元測試比較陌生,對C#也很陌生,但我一直在嘗試使用靜態方法測試使用靜態類的代碼,似乎我必須編寫大量的樣板代碼才能進行測試,那么代碼也可能需要進行測試。

例如:我正在使用System.Web.Security.Membership類,並在其上使用方法ValidateUser 看起來我需要創建一個包含方法ValidateUser的接口IMembership ,然后創建一個實現IMembership的類MembershipWrapper ,實現方法ValidateUser並將參數傳遞給實際的Membership類。 然后我需要在我的類上使用Membership來引用包裝器,以便我可以在測試期間為模擬對象注入依賴項。

因此,為了測試使用Membership 1行代碼,我必須創建一個接口和一個類,並向我的類添加一個屬性和構造函數代碼。 這似乎是錯的,所以我一定是弄錯了。 我該怎么做這個測試? 我已經簡要介紹了一些執行依賴注入的框架/庫,但它們似乎仍然需要大量的樣板,或者非常深入地了解引擎蓋下的內容。

你是在正確的方式,並認為你沒有測試單行代碼,在這種情況下,你正在編寫重要的測試,以確保您的代碼以正確的方式與成員資格提供者交互,這不是簡單的單元測試而是“模擬 - 基於“集成測試。 我認為值得創建所有這些模擬並且已經通過測試覆蓋了這部分應用程序。

是的,它似乎有點矯枉過正,但沒有其他辦法 - 要么你使用一些助手/庫要么自己包裝第三方靜態依賴。

我認為你的系統松散耦合沒有任何問題。 我相信你不會抱怨創建構造函數參數並將抽象依賴項傳遞給類。 但實例化依賴關系看起來更容易,是嗎?

另外,正如我在評論中指出的那樣,您可以稍后重用包裝器。 所以,從一眼就可以看出,這不是無用的工作。

我不喜歡采用構造函數注入的方法,你可以看一下使用Ambient Context

您基本上設置了一個默認值,它將調用System.Web.Security.Membership.ValidateUser

然后,在代碼中的上下文中調用公開的方法,現在可以為測試模擬它

這允許您編寫較少的設置代碼,但它也隱藏了您具有依賴性的事實,這可能是將來的問題(取決於您重用代碼的方式)

如果您使用的是VS2012,則可以始終在Microsoft Fakes中使用Shims進行靜態調用(或.Net庫調用)。

http://msdn.microsoft.com/en-us/library/hh549175(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/hh549176.aspx

暫無
暫無

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

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