在 NUnit 中使用 NSubstitute 的方法阴影
Method Shadowing Using NSubstitute in NUnit
我有一个 Public 方法来测试哪个调用 public 子方法:
子方法有一个可选参数:
public class ChildClass : IChildClass
{
public bool MyChildMethod(string param1, string param2, string param3 = null)
{
...
}
}
父方法像这样调用子方法:
_childClassInstance.MyChildMethod("param1","param2")
当我 运行 我的 UnitTestCase 时,我想将其替换为:
_childClassInstance.MyChildMethod("param1","param2","param3")
如何操作?
简短的回答是没有办法模拟私有方法的行为,通常您不想在单元测试中关注私有方法,因为它们被认为是 "implementation detail"。
但是,如果此方法是 public,则使用 Moq 框架您可以执行以下操作。
Mock<MyChildClass> mockChildClass = new Mock<MyChildClass>();
mockChildClass.Setup(x => x.MyChildMethod("param1", "param2", "param3"));
使用 nsubstitute,您可以通过以下方式隐藏 public 方法调用:
mockObj.When(x => mockObj.MyChildMethod(Arg.Any<string>(), Arg.Any<string>(), null)).Do(MyMethod)
private void MyMethod(CallInfo callInfo)
{
mockObj.MyChildMethod((string)callInfo.Args()[0],(string)callInfo.Args()[1], "param3");
}
我有一个 Public 方法来测试哪个调用 public 子方法:
子方法有一个可选参数:
public class ChildClass : IChildClass
{
public bool MyChildMethod(string param1, string param2, string param3 = null)
{
...
}
}
父方法像这样调用子方法:
_childClassInstance.MyChildMethod("param1","param2")
当我 运行 我的 UnitTestCase 时,我想将其替换为:
_childClassInstance.MyChildMethod("param1","param2","param3")
如何操作?
简短的回答是没有办法模拟私有方法的行为,通常您不想在单元测试中关注私有方法,因为它们被认为是 "implementation detail"。
但是,如果此方法是 public,则使用 Moq 框架您可以执行以下操作。
Mock<MyChildClass> mockChildClass = new Mock<MyChildClass>();
mockChildClass.Setup(x => x.MyChildMethod("param1", "param2", "param3"));
使用 nsubstitute,您可以通过以下方式隐藏 public 方法调用:
mockObj.When(x => mockObj.MyChildMethod(Arg.Any<string>(), Arg.Any<string>(), null)).Do(MyMethod)
private void MyMethod(CallInfo callInfo)
{
mockObj.MyChildMethod((string)callInfo.Args()[0],(string)callInfo.Args()[1], "param3");
}