国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于遺留代碼的測試

2019-11-14 14:23:35
字體:
來源:轉載
供稿:網友

    在大多時候代碼的測試很難,因為很多代碼無法進行參數注入,那么這個時候有一款不受限的隔離框架TypeMock供你使用,不過遺憾這款軟件是付費的一個隔離框架,有15天的免費使用權,如果能解決你現有的問題我想這份費用并不能算多。TypeMock的官方下載http://www.typemock.com/。下面開始看看TypeMock是怎么樣使用的。

1:偽造一個靜態的方法來看一個例子

被測試的靜態方法

public static int DoSomethingSpecialOnALeapYear()        {            if ((DateTime.Now.Month == 3) && (DateTime.Now.Day == 29))                return 100;            return 0;        }
DoSomethingSpecialOnALeapYear

測試方法

1 [TestMethod, Isolated]2         public void FakingDateTime()3         {4             Isolate.WhenCalled(() => DateTime.Now).WillReturn(new DateTime(2016, 3, 29));//當調用當前時間的時候會返回指定的時間5             int result = MyStatic.DoSomethingSpecialOnALeapYear();6             Assert.AreEqual(100, result);7         }
FakingDateTime

2:偽造一個sealed的類

被測試的靜態方法

 1 public static bool SignedIn { get; set; } 2  3         public static bool SignOut(HttpContext current) 4         { 5             if (SignedIn) 6             { 7                 HttpsessionState session = current.Session; 8                 session.Abandon(); 9                 return true;10             }11             return false;12         }
SignOut

如果我們要保證上面的方法能不在依賴HttpContext 那么我們必須要注入這個依賴我們看測試代碼

1 [TestMethod, Isolated]2         public void FakingHttpContext()3         {4             var fakeHttp = Isolate.Fake.Instance<HttpContext>();//需要注入的偽對象5             MyStatic.SignedIn = true;6             var result = MyStatic.SignOut(fakeHttp);7             Assert.AreEqual(true, result);8         }
FakingHttpContext

3:重寫偽造類中的方法

如果一些類現在要按照我們的需要來返回相應的值我們來看看下面這個例子

1 public static bool IsMySiteNameTypemock(PRocess process)2         {3             var name = process.MachineName;4             if (process.MainModule.Site.Name.StartsWith("Typemock"))5                 return true;6             else7                 return false;8         }
IsMySiteNameTypemock

為了上面的程序正常工作那么我們必須需要通過site.Name以Typemock開始所以在測試中我們必須這么做

1 [TestMethod, Isolated]2         public void SetBehaviorOnChainExample()3         {4             var fake = Isolate.Fake.Instance<Process>();5             Isolate.WhenCalled(() => fake.MainModule.Site.Name).WillReturn("Typemock rocks");//設置Site.Name6             var result = MyStatic.IsMySiteNameTypemock(fake);7             Assert.AreEqual(true, result);8         }
SetBehaviorOnChainExample

現在我們來運行測試一下看看結果

4:跳過某一個異常的方法

如果在一個方法體中要先執行一個方法(一個依賴項)然后在執行后面的代碼下面我們在來看這個例子

1 public class Dependency//一個依賴項2     {3         public virtual void CheckSecurity(string name, string passWord)4         {5             throw new SecurityException();6         }7     }
Dependency
1 public int Calculate(int a, int b, Dependency dependency)2         {3             dependency.CheckSecurity("typemock", "rules");4             return a + b;5         }
Calculate

然后我們進行需要跳過CheckSecurity這個會報異常的方法來看看例子

1 [TestMethod, Isolated]2         public void FakeMethod_OnLiveObject() {3             var dependency = new Dependency();4             Isolate.WhenCalled(() => dependency.CheckSecurity(null, null)).IgnoreCall();//不去管這個方法的調用5             var classUnderTest = new ClassUnderTest();6             var result = classUnderTest.Calculate(1, 2, dependency);7             Assert.AreEqual(3, result);8         }
FakeMethod_OnLiveObject

5:在未來某個方法體中創建偽對象

比喻在一個放法A中我們會依賴一個B類那么這個在內部實例化的那么我們該怎么辦呢。看下面這個例子

這個外部的依賴項依然是上面的Dependency。

現在我們來修改Calculate這個方法體如下

1 public static int Calculate(int a, int b) {2             var dependency = new Dependency();3             dependency.CheckSecurity("typemock", "rules");4             return a + b;5         }
Calculate

我們在Calculator中直接去實例化Dependency這個對象了。

那么我們來看看怎么去注入這個偽對象

1     [TestMethod, Isolated]2         public void FakeConstructor() {3             var fakeHandle = Isolate.Fake.NextInstance<Dependency>();//不需要注入在未來進行創建的偽對象4             var result = ClassUnderTest.Calculate(1, 2);5             Assert.AreEqual(3, result);6         }
FakeConstructor

我們采用了NextInstance這個表示在未來的某個方法體中去創建這個偽對象。ok我們來看下測試的效果

上面就簡單介紹了一個typemock的基本用法。

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 澄江县| 鸡泽县| 滦南县| 福泉市| 从江县| 鸡泽县| 房产| 汉中市| 桑日县| 舒兰市| 南宁市| 积石山| 东乌珠穆沁旗| 嘉禾县| 达拉特旗| 江川县| 老河口市| 青神县| 华池县| 集贤县| 宝应县| 正镶白旗| 南投县| 合山市| 伊宁县| 揭西县| 土默特右旗| 福贡县| 钟山县| 云阳县| 隆尧县| 宁德市| 屯门区| 大同县| 鄂尔多斯市| 南和县| 太康县| 莎车县| 汝南县| 庆城县| 家居|