日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用Moles对静态方法做UnitTest

發(fā)布時(shí)間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Moles对静态方法做UnitTest 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??????? 我們?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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。