unit-testing - 在接口(interface)前加上 I?

标签 unit-testing interface dependency-injection tdd coding-style

我目前正在阅读 Rober Martin (UncleBob) 的“清洁代码”,并且通常喜欢 UncleBob 的沉思。但是,当我读到他避免为“IPerson”之类的接口(interface)添加前缀时,我有点困惑。他说“我不希望我的用户知道我正在给他们一个界面”。

从 TDD/注入(inject)的角度思考,我总是非常有兴趣告诉我的类的“用户”我正在处理一个接口(interface)。主要原因是我认为系统的不同“代理”之间的接口(interface)契约。一个代理在我系统的一个角落工作,不应该知道另一个代理工作的具体实现;他们应该只交换契约(Contract),并期望在不知道如何履行的情况下履行契约(Contract)。另一个也是非常重要的原因是可以完全模拟接口(interface),从而使单元测试更加容易。你可以在一个具体的类上模拟多少是有限制的。

因此,我更喜欢想象我确实在处理一个接口(interface)......或者将一个接口(interface)作为参数。但由于 UncleBob 是我们社区中的重量级冠军,而我只是另一个蝇量级桌面骑师,我想知道我是否遗漏了什么。

我坚持我在接口(interface)中是错误的吗?

最佳答案

如果您在谈论 .NET,则与 I 接口(interface)一开始是如此无处不在,以至于丢弃它们会使每个人都感到困惑。

另外我宁愿有

public class Foo : IFoo {}


public class FooImpl : Foo {}

这一切都归结为个人喜好,我自己玩了一段时间,但我回到了I。字首。 YMMV

关于unit-testing - 在接口(interface)前加上 I?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816951/

相关文章:

java - Java/Scala 的简单控制反转框架

php - 使用 Symfony 检查 Controller 内是否处于 "dev"模式

java - 使用Spock和Robospock进行单元测试以创建SQLite数据库

java - openPojo 未获取参数化构造函数

angular - 如何在服务模拟中测试可观察的更改?

java - 为什么需要java中的接口(interface)?

angularjs - 使用 andCallThrough() 在每个测试用例之后重置广播()

Java 泛型 API 架构

c# - 具有接口(interface)和通用模​​型的 WCF

c# - Autofac IComponentContext.Resolve<Type> 是服务定位器模式吗