所以,我遇到了一个模拟私有方法的问题。从我看到的一切都应该起作用,但事实并非如此。
让我们从基础开始 - 这是测试中的代码
public sealed class UnderTest
{
private bool MockPrivate(string name)
{
[snip]
}
private string MethodUnderTest(ParameterHolder parameters)
{
if (!this.MockPrivate(parameters.Parameter2))
{
return null;
}
[Snip]
}
[Snip]
}
public sealed class ParameterHolder
{
public ParameterHolder (bool parameter1, string parameter2)
{
this.Parameter1 = parameter1;
this.Parameter2 = parameter2;
}
public bool Parameter1
{
get;
private set;
}
public string Parameter2
{
get;
private set;
}
}
这是测试方法
public void Test_UnderTest_MethodUnderTest()
{
UnderTest testClass;
ParameterHolder parameters;
dynamic h;
testClass = new UnderTest();
parameters = Isolate.Fake.Instance<ParameterHolder>(Members.CallOriginal);
Isolate.WhenCalled(() => parameters.Parameter1).WillReturn(true);
Isolate.WhenCalled(() => parameters.Parameter2).WillReturn("parameter2value");
h = testClass.AsDynamic();
Isolate.WhenCalled(() => h.MockPrivate((string)null)).WillReturn(true);
Assert.IsNotNull(h.MethodUnderTest(parameters));
}
我还尝试将隔离调用更改为:
Isolate.WhenCalled(() => h.MockPrivate("parameter2value").WillReturn(true);
和
Isolate.WhenCalled(() => h.MockPrivate(parameters.Parameter2).WillReturn(true);
在所有情况下,执行MockPrivate方法,而不是返回模拟的True值。
任何帮助都将不胜感激。
答案 0 :(得分:3)
好的,做了一些检查,这是正确的方法:
Isolate.NonPublic.WhenCalled(testClass, "MockPrivate").WillReturn(true);