av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(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)文章:
主站蜘蛛池模板: 97精品久久| 日韩色在线 | 久久免费精品视频 | 国产精品综合网 | 国产精品美女毛片真酒店 | www.chengren| 破处视频在线观看 | 亚洲精品久久 | yy6080午夜 | 黄色片在线看 | 91成年人| 青青草伊人网 | 99精品网 | 91精品亚洲 | 毛片一级片 | 天天操天天操天天操 | 一区二区三区在线观看视频 | 欧美午夜在线观看 | 毛片在线视频 | 中文久久乱码一区二区 | 国产日韩欧美一区 | 一级做a爰片久久毛片潮喷 亚洲黄色天堂 | 黄色免费一级片 | 欧美激情视频一区二区三区 | 天天色小说 | 久久精品中文 | 国产寡妇亲子伦一区二区三区四区 | 97色在线 | 亚洲免费成人 | 国产中文字幕在线 | 午夜激情影视 | 亚洲精品在线视频观看 | 激情五月综合网 | 一二三四区在线观看 | 999热视频| 久久福利网 | 国产精品6| 黄色影视大全 | 三级在线免费观看 | 日韩亚洲天堂 | 国产资源在线观看 |