使用Moles对静态方法做UnitTest
??????? 我們?cè)陂_發(fā),有時(shí)遇到一些Legcy代碼,然后需要對(duì)它們進(jìn)行UnitTest。UnitTest的重要性在這里不再說了。但是發(fā)現(xiàn)某些Class中有些方法是Static的,按以往的方法我們需要用
Extact Interface 方法 從那個(gè)需要測(cè)試的Class,然后使用 IOC /DI 的方式替換具體的實(shí)現(xiàn),用一個(gè)Fake Class或Mock 一個(gè)實(shí)現(xiàn)來完成 UnitTest?,F(xiàn)在我們可以使用Moles 對(duì)靜態(tài)方法做UnitTest。看下面的示例:
??????? 假設(shè)有這個(gè)樣的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: }???????? 從上面方法我們看到一個(gè)GetMessage靜態(tài)方法,下面看用UnitTest如何測(cè)試它。你需要先下載安裝Moles從官方網(wǎng)站,然后在VS2010中通過Project的 Reference右鍵菜單 在需要Mock Assembly,選擇”Add Moles Assembly” ,它會(huì)自動(dòng)生成一個(gè) “SomeNameAssembly.Moles”程序集。編寫下面的單元測(cè)試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: }需要增加一個(gè)Attribtue [HostType(“Moles”)] 對(duì)于MsTest,MSomeClass是Moles生成的并自動(dòng)引用于Project上了,如上面代碼你可以看到我們可以Mock 這個(gè)方法的實(shí)現(xiàn)了。 對(duì)于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: }就這么簡(jiǎn)單,上面的代碼我們指定兩個(gè)Private方法delegate,一個(gè)是Static method,另一個(gè)是Instance method,這里標(biāo)記是AllInstances。 然后Call那個(gè)Public的方法,最后Assert。它們無縫地你的真正方法整合在一起做UnitTest。
希望對(duì)您的開發(fā)有幫助。
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
該文章也同時(shí)發(fā)布在我的獨(dú)立博客中-Petter Liu Blog。
轉(zhuǎn)載于:https://www.cnblogs.com/wintersun/archive/2011/08/09/2132340.html
總結(jié)
以上是生活随笔為你收集整理的使用Moles对静态方法做UnitTest的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: csdn中下载资源入口查找
- 下一篇: 穷举算法实例