文章詳情頁
.NET使用Moq進行單元測試
瀏覽:112日期:2022-06-08 14:04:30
本篇體驗Moq的一些基本用法。首先通過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的實例
模擬方法后執行回調函數
[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 }} }
- 執行Return方法后,執行Callback回調方法,接收的參數類型是委托
模擬方法依次返回多個值
[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方法可以為方法返回多個值
如果把以下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] 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);} }
- 通過Throws方法,在第二次調用IsEnable()方法時拋出異常。
直接返回被模擬方法的原始返回值
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方法內部拋出異常。當把Moq實例的CallBase屬性設置為true,并調用CallBase方法,可在測試方法中直接返回被模擬類中方法的原始返回值。
模擬泛型類
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);} }
到此這篇關于.NET使用Moq進行單元測試的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持。
標簽:
ASP.NET
相關文章:
1. ASP.NET MVC使用異步Action的方法2. ASP.NET MVC通過勾選checkbox更改select的內容3. asp.net core項目授權流程詳解4. IIS Express 取代 ASP.NET Development Server的配置方法5. 關于Jenkins + Docker + ASP.NET Core自動化部署的問題(避免踩坑)6. .NET SkiaSharp 生成二維碼驗證碼及指定區域截取方法實現7. ASP.NET 2.0頁面框架的幾處變化8. 使用EF Code First搭建簡易ASP.NET MVC網站并允許數據庫遷移9. 使用Hangfire+.NET 6實現定時任務管理(推薦)10. ASP.Net Core(C#)創建Web站點的實現
排行榜