例如,摘录A
String readSource(String file);
摘录B
String readSource(InputStream in);
因此,如果我们将接口定义为A,那么我们只能创建一个仅用于测试的文件。但是,经过一段时间后,管理测试文件将变得非常困难。因此使用B接口,它将使测试更容易。我只需要创建一个假的InputStream
然后检查该方法是否返回我们想要的结果。但是我们必须在每次调用此方法之前处理IOException
。
答案 0 :(得分:1)
如果您接下来使用TDD,那么我会说采用更可测试的方法,但这确实是个人偏好的问题。快速思考......使用代码片段B时代码是否易于使用/维护?如果是这样,那就没有缺点了,这绝对是最佳选择。
答案 1 :(得分:1)
如果readSource()
做的更精细,而不仅仅是返回文件的内容,我肯定会选择解决方案B.
除了更好的可测试性之外,引入一个新的抽象概念(InputStream
)允许您清楚地分离职责 - 一个对象打开正确的文件并将其内容放入内存,一个对象从一个读取源流并返回您需要返回的任何内容(单一责任原则)。