精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Moq中帶ref參數方法的Callback

開發 后端
Moq是.NET平臺上流行的mock類庫。mock對象的方法的參數帶ref關鍵字時感覺壓力很大。本文主要分析Moq在進行單元測試時遇到的問題。

隨著.NET世界中mock技術的普及,Moq也流行了起來,其部分原因是,它是專為那些剛接觸mock技術或需要編寫自定義mock對象的開發人員量身定做的類庫。Moq舍棄了經典的Record/Reply范式,取而代之的是讓測試者使用Lambda表達式設定行為的預期結果,并使用Castle DynamicProxy來截斷mock對象的調用。

最近在使用的時候,當mock對象的方法的參數帶ref關鍵字時感覺壓力很大。

首先來重現一下案發現場,首先定義我們需要mock的接口:

  1. public interface ITestInterface  
  2. {  
  3. string TestMethodWithRef(ref string refStr, string str);  

接下來我們mock我們定義的接口的方法TestMethodWithRef,并指定方法被調用之后執行委托操作:

  1. [TestMethod]  
  2. public void Ref_Param_Test()  
  3. {  
  4. var mock = new Mock<ITestInterface>();  
  5. string refStr = "1";  
  6. string str = "2";  
  7. mock.Setup((m) => m.TestMethodWithRef(ref refStr, str)).Callback((string rs, string s) => Console.WriteLine(rs + s));  
  8. mock.Object.TestMethodWithRef(ref refStr, str);  
  9. mock.VerifyAll();  

上面的測試方法,看上去是沒什么問題,編譯也沒什么問題,但運行測試的話悲劇發生了,拋出異常

System.ArgumentException: Invalid callback. Setup on method with parameters (String&,String) cannot invoke callback with parameters (String,String) 

這異常就是說Callback委托執行的方法的參數與Setup方法的參數對應不起來,有人也許馬上就想說這樣改改不就行了:

  1. mock.Setup((m) => m.TestMethodWithRef(ref refStr, str))  
  2. .Callback((ref string rs, string s) => Console.WriteLine(rs + s)); 

可惜微軟老大很直接的告訴你lamada表達式里面的參數不能用ref和out:

Variables introduced within a lambda expression are not visible in the outer method 

這下子壓力真就大了,淡定,淡定,相信google!找了下還真不少信息,可惜感覺有用的就兩種解決方案。***種很直接,別用Moq偽造對象了,直接自己敲代碼偽造接口或者對象以及相關方法,但感覺這解決方案有點坑爹。第二種就是委托執行的操作里面別傳參數進去了:

  1. mock.Setup((m) => m.TestMethodWithRef(ref refStr, str)).Callback(() => Console.WriteLine(refStr + str)).Returns("").Verifiable(); 

怎么說第二種方案也還算比較滿意,至少能解決大部分問題了。

差不多這事也算完了,可惜很不小心又踩了一個坑,我們修改下我們單元測試方法:

  1. [TestMethod]  
  2. public void Ref_Param_Test()  
  3. {  
  4. var mock = new Mock<ITestInterface>();  
  5. string refStr = "1";  
  6. string str = "1";  
  7. mock.Setup((m) => m.TestMethodWithRef(ref refStr, str)).Callback(() => { refStr = "2"; str = "2"; }).Returns("").Verifiable();  
  8. mock.Object.TestMethodWithRef(ref refStr, str);  
  9. mock.VerifyAll();  
  10. Assert.AreEqual("2", str);  
  11. Assert.AreEqual("2", refStr);  

直接看看這測試的邏輯,我想大部分人應該都會覺得沒啥問題吧?

還是不放心,運行下吧,悲劇繼續發生了,測試失敗:Assert.AreEqual 失敗。應為: <2>,實際為: <1>  

變量refStr的值還是“1”,這下子還真有趣了!

【編輯推薦】

  1. c#中的數據庫訪問工廠
  2. C#選擇正確的集合進行編碼
  3. .NET中值得體驗的精妙設計
  4. ASP.NET控件10個最有用的屬性詳解
責任編輯:于鐵 來源: 博客園
相關推薦

2021-10-04 14:56:09

機器學習函數參數

2009-08-13 09:47:57

調用JSP EL表達式帶參數方法

2010-10-08 16:55:44

MySql存儲過程

2009-08-04 14:44:40

callback實現機ASP.NET2.0

2018-04-13 06:46:43

無服務器單元測試IT云

2022-09-27 11:01:08

Python裝飾器

2009-09-17 13:26:55

.NET方法簽名

2009-07-22 07:53:00

Scala無參數方法

2009-09-23 17:28:55

Hibernate C

2009-09-22 13:31:28

Hibernate C

2010-11-15 10:40:58

Oracle啟動參數

2009-07-09 00:25:00

Scala參數化

2025-04-22 08:16:37

refC#參數

2011-08-23 13:14:05

JDBC帶輸出參數的存儲過程

2017-02-17 10:07:02

AndroidMVP模式實例

2009-07-14 15:53:21

光纖參數測試

2017-01-22 16:35:02

iOSBlockCallback

2024-10-28 08:07:17

2023-10-07 08:21:16

開源軟件Moq

2023-03-17 08:00:34

OpenCVCvType錯誤
點贊
收藏

51CTO技術棧公眾號

色综合一本到久久亚洲91| 国产高清在线观看视频| 一区三区在线欧| 欧美亚洲国产怡红院影院| 亚洲一区二区三区精品动漫| 黄色av网站免费观看| 婷婷亚洲五月| 日韩精品亚洲精品| 亚洲色图偷拍视频| 午夜裸体女人视频网站在线观看| 国产亚洲精品7777| 成人网页在线免费观看| 香蕉免费毛片视频| 日韩欧美二区| 亚洲精品99久久久久| www欧美激情| a√中文在线观看| 国产精品午夜免费| 国产一区精品视频| 国产精品永久久久久久久久久| 激情综合在线| www.国产精品一二区| 女教师高潮黄又色视频| 久久亚洲精品爱爱| 亚洲一二三四在线观看| 亚洲成人第一| 桃花色综合影院| 国产成人综合网站| 欧美专区第一页| 麻豆一区二区三区精品视频| 欧美韩日一区| 夜夜嗨av色一区二区不卡| 中文字幕精品久久久| а天堂中文最新一区二区三区| 狠狠躁夜夜躁人人爽天天天天97 | 午夜视频福利在线观看| 国产在线视频不卡二| 国产精品成av人在线视午夜片 | 欧美亚一区二区| 欧美日韩精品在线一区二区| 18网站在线观看| 亚洲视频在线一区| 亚洲欧美久久234| 国产毛片在线看| 久久麻豆一区二区| 另类欧美小说| 婷婷在线观看视频| 国产精品自拍网站| 亚洲精品欧美日韩专区| 国产一区二区三区三州| 久久精品国产精品亚洲精品| 国产精品久久久久av免费| 日韩精品一区不卡| 日本怡春院一区二区| 国产成人精品日本亚洲| 亚洲av无码精品一区二区| 羞羞答答国产精品www一本| 98精品国产高清在线xxxx天堂| 国产一级二级三级视频| 欧美另类视频| 97人人做人人爱| 五月婷婷开心网| 视频一区二区三区中文字幕| 国产成人自拍视频在线观看| 欧美一级做a爰片免费视频| 奇米777欧美一区二区| 国产精品视频永久免费播放| 怡红院男人天堂| 精品一二线国产| 1区1区3区4区产品乱码芒果精品| 国产高清在线观看视频| 波波电影院一区二区三区| 狠狠色综合网站久久久久久久| 亚洲 欧美 自拍偷拍| 久久夜色精品一区| 亚洲精品永久www嫩草| 日韩伦理在线观看| 一区二区三区四区激情| 久久国产精品网| 日韩a**中文字幕| 欧美喷水一区二区| 黑森林av导航| 精品国产一区二区三区香蕉沈先生| 在线视频免费一区二区| 乱老熟女一区二区三区| 欧美性色综合| 国产97色在线|日韩| 97超视频在线观看| 不卡的av中国片| 亚洲一区二区三区免费看| av在线app| 欧美性高潮在线| 污污的视频免费观看| caoporn成人| 国产亚洲综合久久| 欧美精品久久久久性色| 亚洲永久在线| 91人成网站www| 日韩精品福利| 亚洲精品亚洲人成人网在线播放| 国产一区二区在线视频播放| 国产91亚洲精品久久久| 51精品秘密在线观看| 水蜜桃av无码| 亚洲精品成人| 国产精品扒开腿做爽爽爽视频| 超碰在线观看99| 中文字幕久久午夜不卡| 青草视频在线观看视频| a屁视频一区二区三区四区| 精品va天堂亚洲国产| 国产调教在线观看| 亚洲在线国产日韩欧美| 亚洲a在线观看| 成年在线观看免费人视频| 一区二区三区在线观看网站| 男人插女人下面免费视频| 大桥未久女教师av一区二区| 色琪琪综合男人的天堂aⅴ视频| 久久精品视频8| 国产做a爰片久久毛片| 欧美在线视频二区| ****av在线网毛片| 日韩一区二区三区电影在线观看| 特级西西www444人体聚色| 亚洲美女黄网| 51午夜精品| 麻豆传媒在线免费看| 在线一区二区视频| 亚洲狠狠婷婷综合久久久久图片| 欧美日韩国产一区精品一区| 国产欧美日韩中文字幕在线| 你懂的在线观看视频网站| 亚洲成人av一区| 丰满饥渴老女人hd| 一区二区三区在线| 91精品久久久久久久久久另类| 黄色美女网站在线观看| 欧美日韩国产中字| 亚洲av网址在线| 亚洲激精日韩激精欧美精品| 91在线播放视频| 在线观看男女av免费网址| 91麻豆精品国产91久久久更新时间 | 小说区视频区图片区| 国产福利一区二区三区在线播放| 亚洲人成电影网| 在线观看亚洲黄色| 中文字幕精品综合| a在线观看免费视频| 日韩在线观看电影完整版高清免费悬疑悬疑| 欧美亚洲国产日本| 青青操在线视频| 日本丰满少妇一区二区三区| 久久精品国产亚洲av久| 久久久人人人| 亚洲福利av| 亚洲欧洲日韩精品在线| 久久精品国产清自在天天线| 在线播放亚洲精品| 亚洲精选一二三| 亚洲一区二区三区四区av| 狠狠色丁香久久综合频道| 国产精品丝袜高跟| 成人日韩欧美| 亚洲精品一区二区三区影院| 日韩欧美亚洲视频| 国产亚洲欧美色| 97超碰成人在线| 欧美激情精品久久久六区热门| 99视频国产精品免费观看| 波多一区二区| 亚洲人成电影网站| 国产麻豆一精品一男同| 亚洲国产精品视频| 91精品人妻一区二区| 蜜臀av一区二区在线观看 | 女~淫辱の触手3d动漫| 久久亚洲色图| 美女在线免费视频| 欧美一性一交| 国产精品视频导航| 毛片网站在线看| 亚洲三级 欧美三级| 国产一区二区三区在线观看| 有码一区二区三区| 日韩精品电影一区二区| 国产一区二区不卡老阿姨| 国产人妻777人伦精品hd| 国产午夜一区| 国产精品sss| 日本黄色一区| 欧美激情a在线| 国产日产精品久久久久久婷婷| 91精品国产综合久久久蜜臀粉嫩| 日本a在线观看| 国产精品免费久久久久| 麻豆短视频在线观看| 日韩av中文在线观看| 成年在线观看视频| 国内精品视频在线观看| 91在线网站视频| 亚洲伦乱视频| 久久久久久久一| 日本美女高清在线观看免费| 精品久久久久久久久久久久久久久| 无码人妻精品一区二| 亚洲精品国产高清久久伦理二区| 欧美狂猛xxxxx乱大交3| 国产·精品毛片| 天天干天天玩天天操| 国产精品久久久免费| 欧美 国产 精品| 欧美亚洲国产精品久久| 精品婷婷色一区二区三区蜜桃| 一区二区三区| 国产精品爽爽爽| 英国三级经典在线观看| 久久久久久久影院| 国产在线一区二区视频| 亚洲人在线视频| 日本精品专区| 亚洲电影在线看| 亚洲高清在线观看视频| 欧美精品v国产精品v日韩精品| 在线天堂中文字幕| 亚洲成人资源网| 欧美三级日本三级| 国产精品成人免费| 欧洲性xxxx| 亚洲国产精品传媒在线观看| 中文字幕在线观看网址| a亚洲天堂av| 国产在线观看免费播放| 国产精品亚洲午夜一区二区三区| 久热精品在线播放| 麻豆精品视频在线观看| 免费一级特黄录像| 日产国产高清一区二区三区| 成人免费毛片播放| 日韩vs国产vs欧美| 欧美精品aaaa| 毛片av一区二区三区| 污污的网站18| 免费日本视频一区| 最新中文字幕免费视频| 日本中文在线一区| 欧美日韩一区二区三区69堂| 日本少妇一区二区| 手机在线成人免费视频| 免费一级欧美片在线观看| 天堂一区在线观看| 久久成人久久鬼色| 超碰91在线播放| 国产·精品毛片| www.超碰97| 久久精品综合网| 综合 欧美 亚洲日本| 中文字幕在线观看不卡| jizz亚洲少妇| 亚洲一区二区偷拍精品| 日韩精品一区二区在线播放| 狠狠躁夜夜躁人人爽天天天天97 | 日韩高清一级片| 天天操,天天操| 国产一区二区导航在线播放| 久久久国产精品久久久| 成人av手机在线观看| 国产精品无码网站| 亚洲国产电影在线观看| 三级黄色录像视频| 亚洲在线视频免费观看| 羞羞影院体验区| 欧美日韩中字一区| www.五月婷婷| 亚洲人av在线影院| v片在线观看| 69**夜色精品国产69乱| 国产精品毛片久久久久久久久久99999999| 成人免费在线视频网址| 成人av动漫| 视频一区二区三区在线观看| 久久久久国产| 久久久999免费视频| 久久精品国产秦先生| 亚洲一区二区三区四区av| 国产欧美日韩视频在线观看| 日韩女优一区二区| 色偷偷久久一区二区三区| 国产日韩在线观看一区| 日韩精品视频中文在线观看| 日本中文字幕在线看| 久久久久久久国产精品视频| 美女网站视频一区| 粉嫩精品一区二区三区在线观看| 精品在线99| 黄色三级中文字幕| 青青草91视频| 一区二区三区少妇| 亚洲欧美偷拍另类a∨色屁股| 精品国产乱码一区二区| 4hu四虎永久在线影院成人| 香蕉视频911| 欧美人与性动交a欧美精品| 亚洲日本网址| 国产综合av一区二区三区| 日韩在线看片| 97在线播放视频| 处破女av一区二区| 麻豆精品国产免费| 狠狠做深爱婷婷久久综合一区| 国产美女精品视频国产| 亚洲欧美制服丝袜| 91破解版在线观看| 91精品国产高清久久久久久91裸体| 国产精品自拍区| 亚洲熟女乱色一区二区三区| 国产精一区二区三区| 奇米网一区二区| 色拍拍在线精品视频8848| 色呦呦免费观看| 欧美大片在线看| 国产精品777777在线播放| 色99中文字幕| 视频在线在亚洲| 国产美女精品久久| 激情久久av一区av二区av三区| av免费在线不卡| 日韩在线观看免费高清完整版| 99久久er| 日韩精品欧美专区| 久久国产欧美| 91精彩刺激对白露脸偷拍| 精品欧美一区二区三区| 日本高清视频在线| 久久久噜噜噜久久中文字免| 爱情电影网av一区二区| 成年人黄色在线观看| 久久超碰97中文字幕| 亚洲综合久久av一区二区三区| 欧美主播一区二区三区美女| 黄色大片在线免费观看| 日本aⅴ大伊香蕉精品视频| 亚洲丁香日韩| 国产福利一区视频| 国产欧美日韩精品在线| 无码人妻精品一区二区三区不卡| 亚洲美女精品久久| 无人区在线高清完整免费版 一区二| 精品日本一区二区三区在线观看| 99精品国产在热久久婷婷| 国产精品久久无码| 欧美午夜无遮挡| 国产高清在线| 国产欧美日韩专区发布| 亚洲成人免费| 中文字幕人妻熟女在线| 亚洲成a人片在线不卡一二三区 | 天干夜夜爽爽日日日日| 亚洲色图15p| 性欧美video另类hd尤物| 四虎永久免费网站| 国产成人精品www牛牛影视| 黄色小说在线观看视频| 亚洲精品97久久| 本网站久久精品| 强开小嫩苞一区二区三区网站| 国产精品69毛片高清亚洲| 国产无精乱码一区二区三区| 日韩精品在线观看网站| 超薄肉色丝袜脚交一区二区| 自拍偷拍99| 福利一区二区在线| 6080午夜伦理| 久久天堂电影网| 免费萌白酱国产一区二区三区| 日本成人在线免费视频| 中文字幕制服丝袜成人av| 成人1区2区3区| 国产99久久精品一区二区| 亚洲高清影视| 亚洲黄色在线网站| 欧美男人的天堂一二区| xxx.xxx欧美| 亚洲黄色一区二区三区| 国产精品一级黄| 亚洲精品男人的天堂| 久久久精品在线观看| 日韩精品免费一区二区三区竹菊| 亚洲精品视频导航| 亚洲成人一区在线| eeuss影院www在线播放| 高清免费日韩| 奇米影视一区二区三区小说| 精品无码人妻一区二区三区品| 亚洲无限av看| 加勒比色老久久爱综合网| 午夜视频在线网站| 日韩欧美有码在线| 欧美黄色视屏|