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

本文关键字:一类 单元测试 模拟 方法 MOQ | 更新日期: 2023-09-27 18:17:53

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

我有两个问题:

  1. 不能模拟ClassStatic.Method()因为它是静态的。
  2. 如果我可以模拟ClassStatic,如何OnStep()方法调用ClassStatic. method(),我被模拟

对不起我的英语!!

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

使用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);

}

但是如果你想使用静态类,可以使用shims:

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: 
}