gpt4 book ai didi

c# - 程序员说 "Code against an interface, not an object."是什么意思?

转载 作者:IT王子 更新时间:2023-10-29 03:39:28 24 4
gpt4 key购买 nike

我已经开始了漫长而艰巨的探索,学习 TDD 并将其应用到我的工作流程中。我的印象是 TDD 非常符合 IoC 原则。

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

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

最佳答案

考虑:

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

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

因为 MyMethod只接受 MyClass , 如果你想替换 MyClass使用模拟对象进行单元测试,你不能。更好的是使用接口(interface):

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

关于c# - 程序员说 "Code against an interface, not an object."是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4456424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com