使用Moles对静态方法做UnitTest
??????? 我們在開發,有時遇到一些Legcy代碼,然后需要對它們進行UnitTest。UnitTest的重要性在這里不再說了。但是發現某些Class中有些方法是Static的,按以往的方法我們需要用
Extact Interface 方法 從那個需要測試的Class,然后使用 IOC /DI 的方式替換具體的實現,用一個Fake Class或Mock 一個實現來完成 UnitTest。現在我們可以使用Moles 對靜態方法做UnitTest。看下面的示例:
??????? 假設有這個樣的Class:
1: public class SomeClass 2: { 3: private int AddTenItem(int num) 4: { 5: return num + 10; 6: } 7: ? 8: private static int AddTwentyItem(int num) 9: { 10: return num + 20; 11: } 12: ? 13: public static string GetMessage(string msg) 14: { 15: return string.Format("--{0}--", msg); 16: } 17: ? 18: public string GetTotalItem(int num) 19: { 20: return string.Format("{0}", AddTenItem(num) + AddTwentyItem(num)) ; 21: } 22: }???????? 從上面方法我們看到一個GetMessage靜態方法,下面看用UnitTest如何測試它。你需要先下載安裝Moles從官方網站,然后在VS2010中通過Project的 Reference右鍵菜單 在需要Mock Assembly,選擇”Add Moles Assembly” ,它會自動生成一個 “SomeNameAssembly.Moles”程序集。編寫下面的單元測試Code:
1: [TestMethod] 2: [HostType("Moles")] 3: public void TestGetMessageWithMoles() 4: { 5: //arrange 6: MSomeClass.GetMessageString = (str) => str + "--"; 7: ? 8: //act 9: var result = SomeClass.GetMessage("test"); 10: ? 11: //assert 12: Assert.AreEqual("test--", result); 13: }需要增加一個Attribtue [HostType(“Moles”)] 對于MsTest,MSomeClass是Moles生成的并自動引用于Project上了,如上面代碼你可以看到我們可以Mock 這個方法的實現了。 對于private的方法也可以,看下面的代碼:
1: [TestMethod] 2: [HostType("Moles")] 3: public void TestPrivateMethodWithMoles() 4: { 5: //arrange 6: MSomeClass.AddTwentyItemInt32 = (i) => i + 2; 7: MSomeClass.AllInstances.AddTenItemInt32 = (SomeClass, i) => i + 1; 8: 9: //act 10: string result = new SomeClass().GetTotalItem(1); 11: ? 12: //assert 13: Assert.AreEqual("5", result); 14: }就這么簡單,上面的代碼我們指定兩個Private方法delegate,一個是Static method,另一個是Instance method,這里標記是AllInstances。 然后Call那個Public的方法,最后Assert。它們無縫地你的真正方法整合在一起做UnitTest。
希望對您的開發有幫助。
作者:Petter Liu 
出處:http://www.cnblogs.com/wintersun/ 
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 
該文章也同時發布在我的獨立博客中-Petter Liu Blog。 
轉載于:https://www.cnblogs.com/wintersun/archive/2011/08/09/2132340.html
總結
以上是生活随笔為你收集整理的使用Moles对静态方法做UnitTest的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: csdn中下载资源入口查找
- 下一篇: windows 7 安装 db2 v11
