你应该有一个所有对象/类的接口

时间:2009-10-21 10:20:07

标签: .net unit-testing

作为流程改进的一部分,我们正在努力确保我们所有的项目都有合适的单元测试,因为我需要进行一些教育,我正在努力确定究竟什么是最好的方法来确保我们的课程如同尽可能'可测试'。

我怀疑我们将开始向下移动Mock对象路径,并且大多数示例我已经看到它们接口来模拟对象的实现。所以我的问题是我们应该确保所有类都有一个从中派生的接口吗?

如果不是,那么在识别应该具有接口以允许它们被模拟的类时,您会建议什么过程?

3 个答案:

答案 0 :(得分:7)

没有。在所有类/对象上使用接口只会产生不必要的开销,而不会产生任何额外的好处。

一般的经验法则是你的类应该依赖于抽象而不是具体的实现,所以我建议使用“dependencies”作为起点,任何对另一个类的外部依赖的类都应该实现一个接口。 / p>

答案 1 :(得分:3)

“识别应具有允许模拟的界面的类”

这似乎并不那么难。我不太清楚你为什么这么问。也许你有其他更深层次的问题。

你看看设计并找到所有关联的对类并询问“A依赖于B”,如果是这样的话,B必须被模拟,所以A可以单独测试。

答案 2 :(得分:2)

YAGNI说,直到你需要它为止。我说:如果您使用的是测试驱动设计,那么我认为您应该使用测试指示设计。

作为一个具体的例子,我正在编写一个可以运行嵌入式字节码的虚拟机。与外界的接口是 Runtime 接口。客户端使用它来按名称,查询全局变量等运行函数。

Runtime的实现需要许多不同的组件,其中一个是 VirtualMachine ,它控制对堆栈,内存,寄存器等的访问。

当单元测试时,我们的想法是将每个对象与世界其他地方隔离开来进行测试。但是,运行时依赖于VirtualMachine。要从运行时分离VM,必须对其进行模拟。这意味着VirtualMachine必须来自与MockVirtualMachine共同的接口。

因此,测试规定VirtualMachine应该从接口继承。直到那时我才不需要这样做。