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

时间:2014-10-15 13:34:34

标签: c# mocking tdd

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

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

class Example
{
    C   _obj;
}

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

class Example
{
    Example(IC cInstance) { _obj = cInstance; }
    IC  _obj;
}

因此我无法轻易创建一个模拟对象来实现接口IAIB,我可以用它来测试我的类Example的工作原理。

如何在不使用强制转换或丑陋的情况下执行此操作?

2 个答案:

答案 0 :(得分:5)

您可以使用泛型来完成:

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

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

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

var myMockObj = new CMock();
var example = new Example<CMock>(myMockObj);

答案 1 :(得分:3)

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

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

那并不难看。相反。

相关问题