【发布时间】:2014-05-05 16:16:29
【问题描述】:
我对单元测试/集成测试完全陌生。我读过单元测试在与外部系统交互时应该使用模拟,但这似乎需要大量的手动工作。
对于外部系统,我的意思是:
- 我的班级访问并计算一些信息的大型数据库
- 我的班级访问和检索大型 XML 的外部 Web 服务
- 我的班级实现了一个串行协议,该协议连接到外部机器,经过长时间的对话后检索大量数据并进行计算。
此外部系统并不总是可用,因为它依赖于另一家公司。尽管如此,即使并非所有外部系统都可用,我仍想多次测试我的应用程序。
我正在考虑一个框架(用于 Java 和/或 C++),它执行以下操作:
- 使用某种间谍和真实的外部系统,间谍“记录”(在本地文件中)与外部系统的所有交互。这只需要运行一次。
- 会自动创建一个模拟来“重放”真实系统之前的交互(访问本地文件)。这部分可以根据需要执行多次。
如果我的应用程序(在“重放”阶段)调用它第一次调用的相同方法(“记录”阶段),它应该得到相同的结果。
这样的框架存在吗?如果不是,您会建议什么替代方案?
我已经为许多外部系统实现了模拟器,但它使我的工作翻了一番。例如,在串行协议的情况下,我必须实现我的“客户端”以及“服务器”的模拟器。我想知道是否有办法避免每次都重新发明轮子。
【问题讨论】:
-
这一切听起来都不错,而且相当标准,除了您可能需要 a) 编写大部分代码以满足您的需求 b) 重构您的代码以使单元测试变得实用,因为通常在没有单元测试的情况下编写代码无法访问。顺便说一句,如果您想要一个答案,您将需要提出一个特定的问题,例如
? -
我添加了明确的问题。我认为您对 b) 是正确的。无论如何,也许即使我不进行单元测试,这样的模拟框架也会很有用,只是为了简化为外部系统创建模拟器(然后我可以向应用程序添加一个参数以使用真正的外部系统,录音机或重放机)。我不确定 a)
标签: java c++ testing integration-testing