模拟接口并使用MOQ和C#调用实现的原始方法

时间:2018-07-12 15:30:51

标签: c# .net mocking moq

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

接口:

    id      Type1   Type2   Type3   cluster    distanct_to_cluster_0
0   10000   0.0     0.00    0.00    1          2.3
1   10001   0.0     63.72   0.00    2          3.6 
2   10002   473.6   174.00  31.60   0          0.5 
3   10003   0.0     996.00  160.92  3          3.7 
4   10004   0.0     524.91  0.00    4          1.8  

实例:

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

模拟:

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

当原始实现尚不可用时,如何使用上述模拟在原始实现中调用方法。 SenNotificationPreference方法返回null。

注意:我将为模拟和真实实现编写测试,并且只有在可用时才调用真实实现。

1 个答案:

答案 0 :(得分:1)

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

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