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

本文关键字:接口 对象 创建 模拟 继承 | 更新日期: 2023-09-27 18:26:33

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

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

class Example
{
    C   _obj;
}

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

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

因此,我无法轻松创建一个同时实现接口IAIB的mock对象,我可以用它来测试我的类Example的工作情况。

如何在不使用铸造或丑陋的东西的情况下做到这一点?

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

您可以使用泛型:

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);

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

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

这并不难看。相反地