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

C# 如何为继承多个接口的对象创建模拟接口,c#,mocking,tdd,C#,Mocking,Tdd,我是生成类C对象的库的客户,该类对象实现了两个接口IA和IB,表示我需要存储的永久连接 我需要存储调用之间返回的对象C class Example { C _obj; } 我想模拟C用于测试的接口函数,但由于“C”继承了多个接口,我没有接口IC,因此我无法编写: class Example { Example(IC cInstance) { _obj = cInstance; } IC _obj; } 因此,我无法轻松创建一个模拟对象来实现接口IA和IB,我可以

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

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

class Example
{
    C   _obj;
}
我想模拟
C
用于测试的接口函数,但由于“C”继承了多个接口,我没有接口
IC
,因此我无法编写:

class Example
{
    Example(IC cInstance) { _obj = cInstance; }
    IC  _obj;
}
因此,我无法轻松创建一个模拟对象来实现接口
IA
IB
,我可以用它来测试我的类
示例
是否工作


如何在不使用铸造或其他难看的东西的情况下做到这一点?

您可以使用泛型:

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

如果对象继承了两个接口,您可能应该存储两个引用:

class Example
{
    Example(IA aInstance, IB bInstance) { _a = aInstance; _b = bInstance; }
    IA  _a;
    IB  _b;
}

这并不难看。相反,

我非常喜欢你的解决方案,每当我必须编写C++代码时,我就已经完成了它,但是我最终接受了另一个答案。这是一个很好的替代方案,因为它可以处理两个不同类实现IA和IB.的情况,我把这个解决方案放在我的侧口袋里。
class Example
{
    Example(IA aInstance, IB bInstance) { _a = aInstance; _b = bInstance; }
    IA  _a;
    IB  _b;
}