在NUnit中使用NSubstitute隐藏方法

时间:2015-07-17 14:57:16

标签: c# unit-testing nunit nsubstitute

我有一个Public方法来测试哪个调用公共子方法:

子方法有一个Optional参数:

public class ChildClass : IChildClass
{
        public bool MyChildMethod(string param1, string param2, string param3 = null)
    {
    ...
    }
}

Parent Methods调用子代,如:

_childClassInstance.MyChildMethod("param1","param2")

当我运行UnitTestCase时,我想替换它:

_childClassInstance.MyChildMethod("param1","param2","param3")

怎么做?

2 个答案:

答案 0 :(得分:2)

简短的回答是没有办法嘲笑私人方法的行为,通常你不想在单元测试中关注私人方法,因为它们被认为是一个"实现细节&#34 ;

如果此方法是公开的,那么使用Moq框架可以执行以下操作。

Mock<MyChildClass> mockChildClass = new Mock<MyChildClass>();
mockChildClass.Setup(x => x.MyChildMethod("param1", "param2", "param3"));

答案 1 :(得分:0)

使用nsubstitute可以通过以下方式隐藏公共方法调用:

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