例如,代码片段 A
String readSource(String file);
片段B
String readSource(InputStream in);
因此,如果我们将接口(interface)定义为A,那么我们只能创建一个仅用于测试的文件。但随着时间的推移,管理测试文件就会变得相当困难。所以使用B接口(interface),会让测试变得更容易。我只需要创建一个假的InputStream
,然后检查该方法是否返回我们想要的结果。但是每次调用这个方法之前我们都必须处理IOException
。
最佳答案
如果 readSource()
执行的操作不仅仅是返回文件内容,那么我肯定会选择解决方案 B。
除了更好的可测试性之外,引入一个新的抽象概念(InputStream
)可以让您清晰地分离职责 - 一个对象打开正确的文件并将其内容放入内存,一个对象读取文件从流中获取数据并返回您需要从流中返回的任何内容(单一职责原则)。
关于junit - 我们是否应该定义我们的接口(interface)以使其更易于测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954282/