本篇體驗Moq的一些基本用法。
首先通過NuGet安裝Moq。
包括: 模擬方法的返回值 ... Moq模擬的方法一般是virtual虛方法,介面方法○ mock.
程式人生>net教程>Moq的一些基本用法
Moq的一些基本用法
•net教程•發佈:2018-10-05
本篇體驗Moq的一些基本用法。
首先通過NuGet安裝Moq。
包括:
模擬方法的返回值
模擬方法後執行回撥函式
模擬方法依次返回多個值
模擬第二次呼叫方法返回異常
直接返回被模擬方法的原始返回值
模擬泛型類
模擬方法的返回值
publicclassHelperClass{publicvirtualBooleanIsEnabled(){thrownewException();}}[TestClass]publicclassUnitTest1{[TestMethod]publicvoidTestMethod1(){varmock=newMock();mock.Setup(x=>x.IsEnabled()).Returns(true);Assert.AreEqual(mock.Object.IsEnabled(),true);}}
●Moq模擬的方法一般是virtual虛方法,介面方法●mock.Object是指HelperClass的例項
模擬方法後執行回撥函式
[TestClass]publicclassUnitTest1{[TestMethod]publicvoidTestMethod1(){stringtemp="";varmock=newMock();mock.Setup(x=>x.IsEnabled()).Returns(true).Callback(()=>{temp="success";});Assert.AreEqual(mock.Object.IsEnabled(),true);if(temp=="success"){//TODO}}}
●執行Return方法後,執行Callback回撥方法,接收的引數型別是委託
模擬方法依次返回多個值
[TestClass]publicclassUnitTest1{[TestMethod]publicvoidTestMethod1(){varmock=newMock();mock.SetupSequence(x=>x.IsEnabled()).Returns(true).Returns(false);Assert.AreEqual(mock.Object.IsEnabled(),true);Assert.AreEqual(mock.Object.IsEnabled(),false);}}
●SetupSequence方法可以為方法返回多個值
如果把以下2句:
Assert.AreEqual(mock.Object.IsEnabled(),true);Assert.AreEqual(mock.Object.IsEnabled(),false);
顛倒一下順序,變成:
Assert.AreEqual(mock.Object.IsEnabled(),false);Assert.AreEqual(mock.Object.IsEnabled(),true);
結果,測試不通過。
因為SutupSequence返回方法返回值的時候是有順序的。
模擬第二次呼叫方法返回異常
[TestClass]publicclassUnitTest1{[TestMethod]publicvoidTestMethod1(){varmock=newMock();mock.SetupSequence(x=>x.IsEnabled()).Returns(true).Throws(newException());Assert.AreEqual(mock.Object.IsEnabled(),true);Assert.AreEqual(mock.Object.IsEnabled(),true);}}
●通過Throws方法,在第二次呼叫IsEnable()方法時丟擲異常。
直接返回被模擬方法的原始返回值
publicclassHelperClass{publicvirtualBooleanIsEnabled(){thrownewException();}}[TestClass]publicclassUnitTest1{[TestMethod]publicvoidTestMethod1(){varmock=newMock();mock.CallBase=true;mock.SetupSequence(x=>x.IsEnabled()).CallBase();Assert.AreEqual(mock.Object.IsEnabled(),true);}}
在被模擬的HelperClass類中,IsEnabled方法內部丟擲異常。
當把Moq例項的CallBase屬性設定為true,並呼叫CallBase方法,可在測試方法中直接返回被模擬類中方法的原始返回值。
模擬泛型類
publicclassHelperClasswhereT:class{publicvirtualBooleanIsEnabled(){thrownewException();}}publicclassSample{}[TestClass]publicclassUnitTest1{[TestMethod]publicvoidTestMethod1(){varmock=newMock>();mock.SetupSequence(x=>x.IsEnabled()).Returns(true);Assert.AreEqual(mock.Object.IsEnabled(),true);}}
[Asp.net]絕對路徑和相對路徑
«上一篇
??運算子(C#參考)下一篇»
相關推薦
關於HTML框架(frameset)的一些基本用法
www.否則pan不同set標簽不一定vue.js相同borderframeset
定義
W3C是這樣定義...
androidAndoridManifest.xml一些基本用法
AndoridManifest.xml是一個xml具體是什麼東西
百度比我解釋的好我這邊只是一些常用的...
集合框架--Map集合的一些基本用法
packagecn.itcast.api.a.map;
importjava.util.Collectio...
Tensorflow的一些基本用法
在使用TensorFlow中會遇到一些其基本的用法,再次作為記錄備忘!
tf.add_to_collect...
C++的一些基本用法
這篇部落格可能不是像通常的程式設計書籍一樣,從“helloworld”進行一個視覺化的一個例程,主要就是對一些...
Hibernate中的Query一些基本用法
/***新增*/publicvoidsave(Stustu){ try{ tran=this.GetSe...
vim的一些基本用法
標題
首先vim有三種模式1命令模式2插入模式3退出模式
一vim的命令模式配置下p貼上u撤銷ctrl+r恢復撤銷...
shutil的一些基本用法
importshutil
importtime
importtarfile
#將檔案內容拷貝到另一個檔案中
shutil.copyfileobj(...
Jquery的一些基本用法
1、獲取指定name的radio選定的值:vara=$("input[name='price']:checked").attr("value");2、獲取指定...
jQuery一些基本用法
1、關於頁面元素的引用通過jquery的$()引用元素包括通過id、class、元素名以及元素的層級關係及dom或者xpath...
搜尋
基礎教學
WIN技巧
python技巧
linux技巧
mysql技巧
php技巧
Html教程
JS教程
java教程
net教程
IOS教程
最近訪問