.net 是否应该为所有对象/类提供一个接口

.net 是否应该为所有对象/类提供一个接口,.net,unit-testing,.net,Unit Testing,作为流程改进的一部分,我们正在努力确保我们的所有项目都有合适的单元测试,因为内部需要一些教育,我正在努力确定什么是确保我们的课程尽可能“可测试”的最佳方式 我怀疑我们将开始沿着模拟对象的路线前进,在我所看到的大多数示例中,它们都是模拟对象实现的接口。所以我的问题是,我们是否应该确保所有类都有一个派生它们的接口 如果不是的话,在识别应该有接口以允许模拟的类时,您建议的过程是什么 “识别应该具有接口以允许模拟的类” 这似乎并不难。我不太清楚你为什么要问。也许你还有其他更深层次的问题 查看设计,找到所

作为流程改进的一部分,我们正在努力确保我们的所有项目都有合适的单元测试,因为内部需要一些教育,我正在努力确定什么是确保我们的课程尽可能“可测试”的最佳方式

我怀疑我们将开始沿着模拟对象的路线前进,在我所看到的大多数示例中,它们都是模拟对象实现的接口。所以我的问题是,我们是否应该确保所有类都有一个派生它们的接口

如果不是的话,在识别应该有接口以允许模拟的类时,您建议的过程是什么

“识别应该具有接口以允许模拟的类”

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


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

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


一般的经验法则是,您的类应该依赖于抽象而不是具体的实现,因此我建议使用“依赖项”作为起点,任何作为另一个类的外部依赖项的类都应该实现一个接口。

雅格尼说,在需要之前不要这样做。我说:如果您使用的是测试驱动设计,那么我认为您应该使用“让测试支配设计”

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

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

当进行单元测试时,我们的想法是获取每个对象,并将其与世界其他地方隔离测试。但是,运行时取决于VirtualMachine。要从运行时分离VM,必须对其进行模拟。这意味着VirtualMachine必须派生自与MockVirtualMachine通用的接口

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