【发布时间】:2017-06-21 15:47:34
【问题描述】:
所以,我在模拟私有方法时遇到了问题。从我所看到的一切来看,它应该可以工作,但不是。
让我们从基础开始 - 这是正在测试的代码
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 值。
任何帮助将不胜感激。
【问题讨论】:
标签: typemock typemock-isolator