📅  最后修改于: 2023-12-03 15:18:02.329000             🧑  作者: Mango
Nsubstitute 是一种强大的 .NET mocking 框架,可以让你轻松创建临时对象来模拟在测试中不可用的对象。当你想要对某些代码进行测试时,但不想通过它的依赖对象进行测试时,使用 Nsubstitute 可以帮助你模拟这些尚未实现的依赖,以便你可以单元测试你的代码。
在使用 Nsubstitute 进行 Mock 测试时,使用配置属性可以更好地控制返回值,参数匹配和其他更高级的功能。通过本文,你将学习如何使用 Nsubstitute 的配置属性来掌控更多的 Mock 测试细节。
Nsubstitute 的配置属性使用起来非常容易,它提供了各种各样的方法,以满足你所需要的各种测试情形。下面是一些常用的配置方法:
.Returns(value1, value2, …)
:指定该函数或属性应该在每次调用时返回一个或多个给定的值。.ReturnsForAnyArgs(value1, value2, …)
:指定该函数或属性应该在任何参数下都返回一个或多个给定的值。.Returns(Func<T>
:指定该函数或属性应该在每次调用时通过调用给定的函数来返回一个值。.ReturnsForAnyArgs(Func<T>
:指定该函数或属性应该在任何参数下都通过调用给定的函数返回一个值。.Throws(Exception)
:指定在调用该函数或属性时应抛出一个异常。.Do(action)
:指定在调用该函数或属性时应该执行给定的操作,比如保存参数。以下是一些使用 Nsubstitute 配置属性进行 Mock 测试的示例:
var mySubstitute = Substitute.For<IMyInterface>();
mySubstitute.MyMethod(Arg.Any<int>()).Returns(42);
该代码中,IMyInterface
的 MyMethod
方法在任何输入值下都会返回 42。
var mySubstitute = Substitute.For<IMyInterface>();
mySubstitute.MyProperty.Returns(42, 24, 42, 0);
该代码中,每次访问 MyProperty
属性的值将依次返回 42、24、42 和 0。
var mySubstitute = Substitute.For<IMyInterface>();
mySubstitute
.When(x => x.MyMethod(Arg.Is("input")))
.Do(x => Console.WriteLine("Called with 'input'"));
该代码中,当 MyMethod
方法被传入值为 "input" 的参数时,该函数将执行一个 Console.WriteLine
语句。
通过配置 Nsubstitute 属性,你可以灵活地控制你的 Mock 测试。不论你是在测试一个已有的代码还是编写新的代码,Nsubstitute 配置属性都可以使你的测试更加准确和有用。