当程序员说“针对接口而不是对象进行编码”时,他们的意思是什么?

2023-12-12

我已经开始了漫长而艰巨的学习和探索applyTDD 融入我的工作流程。我的印象是 TDD 非常符合 IoC 原则。

在浏览了 SO 中的一些 TDD 标记问题后,我发现针对接口而不是对象进行编程是一个好主意。

您能否提供简单的代码示例来说明这是什么以及如何将其应用到实际用例中?简单的例子是我(和其他想要学习的人)掌握概念的关键。


考虑:

class MyClass
{
    //Implementation
    public void Foo() {}
}

class SomethingYouWantToTest
{
    public bool MyMethod(MyClass c)
    {
        //Code you want to test
        c.Foo();
    }
}

Because MyMethod只接受一个MyClass,如果你想替换MyClass使用模拟对象来进行单元测试,你不能。更好的是使用接口:

interface IMyClass
{
    void Foo();
}

class MyClass : IMyClass
{
    //Implementation
    public void Foo() {}
}

class SomethingYouWantToTest
{
    public bool MyMethod(IMyClass c)
    {
        //Code you want to test
        c.Foo();
    }
}

现在您可以测试MyMethod,因为它只使用一个接口,而不是特定的具体实现。然后,您可以实现该接口来创建您想要用于测试目的的任何类型的模拟或伪造。甚至还有像 Rhino Mocks 这样的库Rhino.Mocks.MockRepository.StrictMock<T>(),它采用任何接口并动态地为您构建一个模拟对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当程序员说“针对接口而不是对象进行编码”时,他们的意思是什么? 的相关文章

随机推荐