我有一个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")
怎么做?
答案 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");
}