代码之家  ›  专栏  ›  技术社区  ›  Bendram

模拟接口并使用moq和c调用原始实现方法#

  •  1
  • Bendram  · 技术社区  · 6 年前

    我有一个IEmployee接口,但还没有可用的实现。当多个开发人员在同一个模块上工作时,就会发生这种情况。现在,我正在编写一个集成测试来测试我的更改,并且需要一个Iemployee接口的模拟,但是当该方法在程序集dll中可用时,我的测试应该调用原始实现。我可以创建类的实例

    接口:

    public interface IEmployee
    {
        bool IsWorkingOnDate();
        SendNotificationPreference();
    }
    

    实例:

    Type ob = Assembly.Load("MockUtility").GetType(string.Format("MockUtility.Employee");
     var Emp = (IEmployee)Activator.CreateInstance(ob);
    

    嘲弄:

    var bobMock = new Moq.Mock<IEmployee>();
            bobMock.Setup(x => x.IsWorkingOnDate())
               .Returns(value);
    bobMock.Setup(x => x.SendNotificationPreference());
    

    当原始实现还不可用时,如何使用上述模拟调用原始实现中的方法。 sennotificationPreference方法返回空值。

    注意:我将为模拟实现和实际实现编写测试,只有当实际实现可用时才调用它。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Piotr Wojsa    5 年前

    我认为您想要实现的是在调用mock时调用适当的方法。 最简单的方法是:

    bobMock.Setup(x => x.SendNotificationPreference()).Callback(() => 
    {
        if(isImplemented)
        {
            yourObject.YourMethod();
        }
    });