文章詳情頁(yè)
.NET使用Moq進(jìn)行單元測(cè)試
瀏覽:165日期:2022-06-08 14:04:30
本篇體驗(yàn)Moq的一些基本用法。首先通過(guò)NuGet安裝Moq。
模擬方法的返回值
public class HelperClass {public virtual Boolean IsEnabled(){ throw new Exception();} } [TestClass] public class UnitTest1 {[TestMethod]public void TestMethod1(){ var mock = new Mock<HelperClass>(); mock.Setup(x => x.IsEnabled()).Returns(true); Assert.AreEqual(mock.Object.IsEnabled(),true);} }
- Moq模擬的方法一般是virtual虛方法,接口方法
- mock.Object是指HelperClass的實(shí)例
模擬方法后執(zhí)行回調(diào)函數(shù)
[TestClass] public class UnitTest1 {[TestMethod]public void TestMethod1(){ string temp = ""; var mock = new Mock<HelperClass>(); mock.Setup(x => x.IsEnabled()).Returns(true).Callback(() => { temp = "success"; }); Assert.AreEqual(mock.Object.IsEnabled(),true); if (temp == "success") {//TODO }} }
- 執(zhí)行Return方法后,執(zhí)行Callback回調(diào)方法,接收的參數(shù)類型是委托
模擬方法依次返回多個(gè)值
[TestClass] public class UnitTest1 {[TestMethod]public void TestMethod1(){ var mock = new Mock<HelperClass>(); mock.SetupSequence(x => x.IsEnabled()).Returns(true).Returns(false); Assert.AreEqual(mock.Object.IsEnabled(),true); Assert.AreEqual(mock.Object.IsEnabled(), false);} }
- SetupSequence方法可以為方法返回多個(gè)值
如果把以下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);
結(jié)果,測(cè)試不通過(guò)。因?yàn)镾utupSequence返回方法返回值的時(shí)候是有順序的。
模擬第二次調(diào)用方法返回異常
[TestClass] public class UnitTest1 {[TestMethod]public void TestMethod1(){ var mock = new Mock<HelperClass>(); mock.SetupSequence(x => x.IsEnabled()).Returns(true).Throws(new Exception()); Assert.AreEqual(mock.Object.IsEnabled(),true); Assert.AreEqual(mock.Object.IsEnabled(), true);} }
- 通過(guò)Throws方法,在第二次調(diào)用IsEnable()方法時(shí)拋出異常。
直接返回被模擬方法的原始返回值
public class HelperClass {public virtual Boolean IsEnabled(){ throw new Exception();} } [TestClass] public class UnitTest1 {[TestMethod]public void TestMethod1(){ var mock = new Mock<HelperClass>(); mock.CallBase = true; mock.SetupSequence(x => x.IsEnabled()).CallBase(); Assert.AreEqual(mock.Object.IsEnabled(), true);} }
在被模擬的HelperClass類中,IsEnabled方法內(nèi)部拋出異常。當(dāng)把Moq實(shí)例的CallBase屬性設(shè)置為true,并調(diào)用CallBase方法,可在測(cè)試方法中直接返回被模擬類中方法的原始返回值。
模擬泛型類
public class HelperClass<T> where T : class {public virtual Boolean IsEnabled(){ throw new Exception();} } public class Sample{} [TestClass] public class UnitTest1 {[TestMethod]public void TestMethod1(){ var mock = new Mock<HelperClass<Sample>>(); mock.SetupSequence(x => x.IsEnabled()).Returns(true); Assert.AreEqual(mock.Object.IsEnabled(), true);} }
到此這篇關(guān)于.NET使用Moq進(jìn)行單元測(cè)試的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持。
標(biāo)簽:
ASP.NET
相關(guān)文章:
1. .net6 在中標(biāo)麒麟下的安裝和部署過(guò)程2. ASP.NET MVC前臺(tái)動(dòng)態(tài)添加文本框并在后臺(tái)使用FormCollection接收值3. .NET使用YARP通過(guò)編碼方式配置域名轉(zhuǎn)發(fā)實(shí)現(xiàn)反向代理4. ASP.NET Core實(shí)現(xiàn)中間件的幾種方式5. .NET SkiaSharp 生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)6. ASP.NET泛型三之使用協(xié)變和逆變實(shí)現(xiàn)類型轉(zhuǎn)換7. ASP.NET MVC使用異步Action的方法8. .NET 中配置從xml轉(zhuǎn)向json方法示例詳解9. .Net core 的熱插拔機(jī)制的深入探索及卸載問(wèn)題求救指南10. ASP.NET MVC通過(guò)勾選checkbox更改select的內(nèi)容
排行榜
