在 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");
        }