国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

.NET使用Moq進行單元測試

瀏覽:122日期: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
相關文章:
主站蜘蛛池模板: 亚洲成在人线中文字幕 | 国产精品免费_区二区三区观看 | 欧美ox | 成人三级毛片 | 美女扒开腿被男人猛视频 | 久久精品国产欧美 | 一级毛片免费看 | 亚洲2020天天堂在线观看 | 国产精品日产三级在线观看 | 日韩欧美一及在线播放 | 国产成在线观看免费视频成本人 | 成人精品一区二区三区中文字幕 | 日本在线视频播放 | 久久厕所精品国产精品亚洲 | 久久99精品久久久久久三级 | 天堂色网站 | 日韩亚洲欧美一区二区三区 | 精品国产午夜肉伦伦影院 | 亚洲欧美一区在线 | 精品欧美一区二区精品久久 | 韩国欧洲一级毛片 | 97sese论坛| 日韩午夜视频在线观看 | 国产成人做受免费视频 | 亚洲图片一区二区三区 | 亚洲一区二区欧美 | 亚洲精品国产第一区二区三区 | 亚洲丝袜另类 | 国产亚洲精品hd网站 | 久久久久久极精品久久久 | 国产在线欧美日韩一区二区 | 欧美在线一级毛片观看 | 日韩特级片 | 久久精品资源 | 久久99爰这里有精品国产 | 日本a级毛片免费观看 | 国产一级做a爰片久久毛片男 | 91精品国产9l久久久久 | 男人久久天堂 | 亚洲成人中文字幕 | 男操女免费视频 |