【问题标题】:How to create a mock interface for an object inheriting multiple interfaces如何为继承多个接口的对象创建模拟接口
【发布时间】:2014-10-15 13:34:33
【问题描述】:

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

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

class Example
{
    C   _obj;
}

我想mockC使用的接口函数进行测试,但是因为'C'继承了多个接口我没有接口IC,所以我写不出来:

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

因此,我无法轻松创建一个模拟对象来实现两个接口 IAIB,我可以使用它来测试我的类 Example 是否有效。

如何在不使用强制转换或丑陋的东西的情况下做到这一点?

【问题讨论】:

    标签: c# mocking tdd


    【解决方案1】:

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

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

    【讨论】:

    • 我把这个解决方案放在我的侧袋里。
    【解决方案2】:

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

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

    这并不难看。恰恰相反。

    【讨论】:

    • 我真的很喜欢你的解决方案,每当我必须编写 C++ 代码时我都会这样做,但我最终接受了另一个答案。
    • 这是一个很好的替代解决方案,因为它可以处理两个不同的类实现 IA 和 IB 的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多