【问题标题】:Writing Tests for Background Processes (like background jobs)为后台进程编写测试(如后台作业)
【发布时间】:2012-02-06 16:26:11
【问题描述】:
我有一个使用 Spring 构建的 Web 应用程序,其中包含一些作业。
一个典型的工作是运行数据库,获取修改后的客户列表,生成一个文件并通过 FTP 传输它。我的问题是,如何在这份工作中进行单元测试?
我是否应该只为工作的每个“步骤”编写单元测试,例如:
- 测试获取修改后客户的方法。
- 测试文件生成代码。
- 测试 FTP 代码。
但在这种情况下,我会错过上述工作的“集成”测试用例。此外,Emma 报告作业形式中存在未经测试的代码。
任何想法表示赞赏。
谢谢!
【问题讨论】:
标签:
java
spring
unit-testing
junit4
【解决方案1】:
单元测试实际上是一次只测试一个类。这意味着您必须模拟依赖项。春天非常适合。
我会建议 Mockito 进行模拟。这是一个了不起的工具,您将学习 TDD,这也是编写漂亮代码的一种方式。
集成测试是另一个主题,需要另一种策略。
通过扩展 AbstractTransactionalJUnit4SpringContextTests 对数据库进行测试。你会在网上找到例子。通常,您还使用内存数据库来进行这些测试(h2 对此很有用)。可以在单元测试阶段完成。
生成文件可以作为单元测试来完成。您生成文件并验证正确的内容。或者错误...
对于 FTP 部分,我会说它更多是集成测试的一部分,除非您可以从构建脚本中生成 FTP 服务器。
【解决方案2】:
您必须为每个步骤编写一个单元测试。也许你需要模拟一些方法。
然后,您可以编写一个集成测试来验证整体,但也许您需要存根某些部分(例如 FTP 服务器,在您的测试中使用嵌入式 FTP 服务器)。