如何在MOQ中使用另一个类单元测试中的模拟方法

时间:2014-08-14 08:44:48

标签: c# unit-testing mocking moq

class CurrentClass
{

    public Task OnStep()
    {
        this.Property = ClassStatic.Method();
    }
}

我有2个问题:

  1. 无法模拟ClassStatic.Method(),因为它是静态的。
  2. 如果我可以模拟ClassStatic,那么OnStep()方法如何调用我被嘲笑的ClassStatic.Method()
  3. 抱歉我的英文!!!

1 个答案:

答案 0 :(得分:2)

使用Microsoft Shims测试静态方法。但通常不要使用静态类和方法。像这样使用依赖注入:

class MyClass
{
    IUtility _util;

    public MyClass(IUtility util)
    {
        _util = util;
    }

    public Task OnStep()
    {
       this.Property = _util.Method();
    }
}

public TestMethod()
{
    IUtility fakeUtil = Mock.Of<IUtility>();

    MyClass x = new MyClass(fakeUtil);


}

但是如果你想使用静态类而不是使用垫片:

using (ShimsContext.Create())
{
    // Arrange:
    // Shim ClassStatic.Method to return a fixed date:
    Namespace.ShimClassStatic.Method = 
    () =>
    { 
      // This will overwrite your static method
       // Fake method here
    };

    // Instantiate the component under test:
    var componentUnderTest = new MyComponent();

    // Act:

    // Assert: 
}