junit - 我们是否应该定义我们的接口(interface)以使其更易于测试?

标签 junit tdd

例如,代码片段 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/

相关文章:

unit-testing - TestNG 可以看到我的 Spock (JUnit) 测试结果吗?

selenium - junit.framework.AssertionFailedError : No tests found in register

language-agnostic - 你会从什么单元测试开始?

java - 模拟 servlet,我该如何正确地模拟它?

java - PowerMock - 如何调用操作模拟方法的参数

exception - JUnit : a Successful test if an exception is catched

tdd - 端到端测试整个系统的最佳实践

node.js - 使用 Visual Studio Code 的 Mocha 断点

unit-testing - 不返回值的方法的最小起订量调用库(void 方法)

php - Codeception - cest 和 cept 有什么区别?