【发布时间】:2017-05-01 10:58:24
【问题描述】:
我需要实现将 Zip 子文件夹提取到文件夹中的功能。候选接口可能是(Java):
interface ZipExtractor {
void extract(File zipFile, String subfolderName, File targetFolder);
}
当我打算实现这个接口时,我将有两个相关的子组件:一个能够列出 zip 子文件夹中的文件的类,以及一个可以从 zip 中提取单个文件的类。
我在谷歌上搜索了很多关于这个案例的最佳实践,并发现了一些有趣的争论,例如:
- 独立单元测试与社交单元测试
- mockist vs 经典风格
- “应始终模拟文件系统访问”与“没关系,但测试套件运行时间没有太大影响”
什么是最好的选择:
- 按原样使用 ZipExtractor,为其提供文件系统上存在的真实文件,并检查文件是否已正确提取?这听起来更像是一个小型集成测试,但代码更小更简单,我测试了整个功能。
- 模拟 ZipExtractor 的子组件以返回一个虚假的子文件列表,而不是写入文件系统,并在子组件上添加测试?这是真正的单元测试,但需要从测试中进行更多配置,因此代码更加冗长。
我个人的感觉是使用第一种方法,但我想要其他带有论据的意见。谢谢
【问题讨论】:
-
我会两者兼得。每个项目都需要单元和集成测试。它不必是非此即彼的选择。
标签: java unit-testing junit