亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

.NET使用Moq進(jìn)行單元測試

瀏覽:145日期: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的實例

模擬方法后執(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ù)類型是委托

模擬方法依次返回多個值

    [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);

結(jié)果,測試不通過。因為SutupSequence返回方法返回值的時候是有順序的。

模擬第二次調(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);}    }
  • 通過Throws方法,在第二次調(diào)用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方法內(nèi)部拋出異常。當(dāng)把Moq實例的CallBase屬性設(shè)置為true,并調(diào)用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);}    } 

到此這篇關(guān)于.NET使用Moq進(jìn)行單元測試的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持。

標(biāo)簽: ASP.NET
相關(guān)文章:
主站蜘蛛池模板: 国产亚洲精品高清在线 | 91精品视频在线看 | 黄色永久免费 | 亚洲精品国产美女在线观看 | 黑人粗又长 | 看全免费的一级毛片 | 亚洲欧美日韩中文字幕久久 | 日韩欧美视频一区 | 一级黄色日b片 | 日本www黄| 91短视频在线观看手机 | 黄色.www | 日本一区二区三区日本免费 | 黑人巨大系列在线播放 | 亚洲福利视频一区二区三区 | 全黄a免费一级毛片人人爱 全黄一级裸片视频在线观看 | 狠狠色丁香婷婷久久综合不卡 | 特黄特级a级黄毛片免费观看多人 | 国产综合精品日本亚洲777 | 国产精品久久久久9999小说 | 久久99精品久久久久久园产越南 | 欧美一级毛片一级 | 日本免费看片在线播放 | 在线精品欧美日韩 | 97国产成人精品免费视频 | 国内在线视频 | 亚洲一级毛片免费看 | 亚洲欧美日韩精品久久亚洲区 | 一级毛片免费观看不卡的 | 日本黄色大片视频 | 亚洲日本在线观看视频 | 欧洲色图亚洲色图 | 亚洲综合色婷婷 | 日本亚洲一区二区 | 91人人视频国产香蕉 | 成人免费视频在 | 久久ri精品高清一区二区三区 | a毛片视频| 美国三级视频 | 草草免费观看视频在线 | 色中文在线 |