您现在的位置是:网站首页> 编程资料编程资料
.NET使用Moq进行单元测试_实用技巧_
2023-05-24
416人已围观
简介 .NET使用Moq进行单元测试_实用技巧_
本篇体验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(); 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(); 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(); 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(); 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(); mock.CallBase = true; mock.SetupSequence(x => x.IsEnabled()) .CallBase(); Assert.AreEqual(mock.Object.IsEnabled(), true); } } 
在被模拟的HelperClass类中,IsEnabled方法内部抛出异常。当把Moq实例的CallBase属性设置为true,并调用CallBase方法,可在测试方法中直接返回被模拟类中方法的原始返回值。
模拟泛型类
public class HelperClasswhere T : class { public virtual Boolean IsEnabled() { throw new Exception(); } } public class Sample{} [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { var mock = new Mock >(); mock.SetupSequence(x => x.IsEnabled()).Returns(true); Assert.AreEqual(mock.Object.IsEnabled(), true); } }
到此这篇关于.NET使用Moq进行单元测试的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
您可能感兴趣的文章:
相关内容
- .NET扩展方法使用实例详解_实用技巧_
- ASP.NET泛型四之使用Lazy<T>实现延迟加载_实用技巧_
- ASP.NET泛型三之使用协变和逆变实现类型转换_实用技巧_
- ASP.NET泛型二之泛型的使用方法_实用技巧_
- ASP.NET泛型一之泛型简介与基本语法_实用技巧_
- ASP.NET堆和栈四之对托管和非托管资源的垃圾回收和内存分配_实用技巧_
- ASP.NET堆和栈三之引用类型对象拷贝和内存分配_实用技巧_
- ASP.NET堆和栈二之值类型和引用类型的参数传递和内存分配_实用技巧_
- ASP.NET堆和栈一之基本概念和值类型内存分配_实用技巧_
- ASP.NET MVC在基控制器中处理Session_实用技巧_
