如何为继承多个接口的对象创建模拟接口

Blu*_*rin 2 c# tdd mocking

我是一个库生成类对象的客户C,它实现了两个接口IAIB,它表示我需要存储的永久连接.

我需要存储C调用之间返回的对象.

class Example
{
    C   _obj;
}
Run Code Online (Sandbox Code Playgroud)

我想模拟C用于测试的接口函数,但因为'C'继承了多个接口我没有接口IC,所以我不能写:

class Example
{
    Example(IC cInstance) { _obj = cInstance; }
    IC  _obj;
}
Run Code Online (Sandbox Code Playgroud)

因此,我不能轻易地创建一个能够实现这两个接口一个模拟对象IA,并IB可以随便使用测试,我的班Example工作.

如何在不使用铸造或丑陋的情况下执行此操作?

hel*_*elb 5

你可以使用泛型来做到这一点:

class Example<T> where T : IA, IB
{
    public Example(T instance)
    {
        this.obj = instance;
    }
    private T obj;
}
Run Code Online (Sandbox Code Playgroud)

只要该类实现两个接口,您就可以使用C或使用您的模型Example:

class CMock : IA, IB
{
    // ...
}

var myMockObj = new CMock();
var example = new Example<CMock>(myMockObj);
Run Code Online (Sandbox Code Playgroud)