【问题标题】:Trouble mocking a private method无法模拟私有方法
【发布时间】: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


    【解决方案1】:

    好的,做了更多检查,这是正确的方法:

    Isolate.NonPublic.WhenCalled(testClass, "MockPrivate").WillReturn(true);
    

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2017-03-15
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-15
      • 2018-07-17
      相关资源
      最近更新 更多