我们应该定义我们的界面以使其更易于测试吗?

时间:2012-12-19 14:17:03

标签: junit tdd

例如,摘录A

String readSource(String file);

摘录B

String readSource(InputStream in);

因此,如果我们将接口定义为A,那么我们只能创建一个仅用于测试的文件。但是,经过一段时间后,管理测试文件将变得非常困难。因此使用B接口,它将使测试更容易。我只需要创建一个假的InputStream然后检查该方法是否返回我们想要的结果。但是我们必须在每次调用此方法之前处理IOException

2 个答案:

答案 0 :(得分:1)

如果您接下来使用TDD,那么我会说采用更可测试的方法,但这确实是个人偏好的问题。快速思考......使用代码片段B时代码是否易于使用/维护?如果是这样,那就没有缺点了,这绝对是最佳选择。

答案 1 :(得分:1)

如果readSource()做的更精细,而不仅仅是返回文件的内容,我肯定会选择解决方案B.

除了更好的可测试性之外,引入一个新的抽象概念(InputStream)允许您清楚地分离职责 - 一个对象打开正确的文件并将其内容放入内存,一个对象从一个读取源流并返回您需要返回的任何内容(单一责任原则)。