【问题标题】:What record-and-replay network protocol stubbing/mocking tools are there for C++ and Java? [closed]有哪些用于 C++ 和 Java 的记录和重放网络协议存根/模拟工具? [关闭]
【发布时间】:2014-05-05 16:16:29
【问题描述】:

我对单元测试/集成测试完全陌生。我读过单元测试在与外部系统交互时应该使用模拟,但这似乎需要大量的手动工作。

对于外部系统,我的意思是:

  • 我的班级访问并计算一些信息的大型数据库
  • 我的班级访问和检索大型 XML 的外部 Web 服务
  • 我的班级实现了一个串行协议,该协议连接到外部机器,经过长时间的对话后检索大量数据并进行计算。

此外部系统并不总是可用,因为它依赖于另一家公司。尽管如此,即使并非所有外部系统都可用,我仍想多次测试我的应用程序。

我正在考虑一个框架(用于 Java 和/或 C++),它执行以下操作:

  • 使用某种间谍和真实的外部系统,间谍“记录”(在本地文件中)与外部系统的所有交互。这只需要运行一次。
  • 会自动创建一个模拟来“重放”真实系统之前的交互(访问本地文件)。这部分可以根据需要执行多次。

如果我的应用程序(在“重放”阶段)调用它第一次调用的相同方法(“记录”阶段),它应该得到相同的结果。

这样的框架存在吗?如果不是,您会建议什么替代方案?

我已经为许多外部系统实现了模拟器,但它使我的工作翻了一番。例如,在串行协议的情况下,我必须实现我的“客户端”以及“服务器”的模拟器。我想知道是否有办法避免每次都重新发明轮子。

【问题讨论】:

  • 这一切听起来都不错,而且相当标准,除了您可能需要 a) 编写大部分代码以满足您的需求 b) 重构您的代码以使单元测试变得实用,因为通常在没有单元测试的情况下编写代码无法访问。顺便说一句,如果您想要一个答案,您将需要提出一个特定的问题,例如?
  • 我添加了明确的问题。我认为您对 b) 是正确的。无论如何,也许即使我不进行单元测试,这样的模拟框架也会很有用,只是为了简化为外部系统创建模拟器(然后我可以向应用程序添加一个参数以使用真正的外部系统,录音机或重放机)。我不确定 a)

标签: java c++ testing integration-testing


【解决方案1】:

对于 Java:http://freeside.co/betamax/

对于 C++,这是某人自己开发的解决方案:http://www.codeproject.com/Articles/381622/Unit-test-and-the-man-in-the-middle

【讨论】:

  • Betamax 适用于 http 和 https(非常好!)但是 jdbc、tcp 或串行有什么类似的吗? C++ 选项似乎支持所有协议(我还没有测试过任何东西)
  • 正在寻找 Betamax 的替代品我找到了 rest-driverwiremockrestito。它们似乎都只适用于 HTTP 和 HTTPS。
  • 我不知道 Java 中用于其他协议的类似工具。
  • 对于 JDBC 有 JdbcProxy:sourceforge.net/projects/jdbcproxy 根据文档它可以用于记录和回放,但是我从 2006 年开始就没有更新过,我还没有尝试过。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2018-08-24
  • 2010-11-08
  • 2015-05-07
  • 1970-01-01
相关资源
最近更新 更多