Junit 我们应该定义接口以使其更易于测试吗?

Junit 我们应该定义接口以使其更易于测试吗?,junit,tdd,Junit,Tdd,例如,代码片段A String readSource(String file); 片段B String readSource(InputStream in); 因此,如果我们将接口定义为,那么我们只能创建一个用于测试的文件。但是,当一段时间过去后,管理测试文件将变得非常困难。因此,使用B接口,将使测试更容易。我只需要创建一个假的InputStream,然后检查该方法是否返回我们想要的结果。但是,在每次调用此方法之前,我们必须先处理IOException。如果您使用以下TDD,那么我会说选择更

例如,代码片段A

String readSource(String file);
片段B

String readSource(InputStream in);

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

如果您使用以下TDD,那么我会说选择更易于测试的方法,这实际上是个人偏好的问题。一个快速的想法。。。使用代码段B时,代码是否易于使用/维护?如果是这样的话,那么就没有坏处了,这绝对是一条路。

如果
readSource()
做了比返回文件内容更详细的事情,我肯定会选择解决方案B


除了更好的可测试性之外,引入一个新的抽象概念(
InputStream
)还允许您明确区分责任——一个对象打开正确的文件并将其内容放入内存,一个对象从流中读取源代码并返回您需要返回的任何内容(单一责任原则).

您的意思是我应该创建这两个方法,并通过方法A调用方法B。然后我应该只测试方法A吗?