【问题标题】:How to mock whether information is sent to another server correctly?如何模拟信息是否正确发送到另一台服务器?
【发布时间】:2015-01-24 04:57:01
【问题描述】:

我需要模拟测试这个案例:

我已经在我的服务器(称为 server1)中完成了一项功能,因此 当server1收到带有conditionA的请求时,将metrics信息“conditionA:1”发送给另一个server2(server2的作用是收集所有metrics的结果。例如,如果server2收到两次“conditionA:1”,它会记录:“conditionA : 2")。

如何使用 mock 对我的功能进行单元测试,以便我知道 server2 接收到信息?

注意我知道如何创建一个生成条件 A 的模拟请求。但我不知道如何对度量标准是否正确发送到 server2 进行单元测试。任何想法?

【问题讨论】:

  • 我在应用层工作,所以不知道他们是如何通信的。 must be 必须是某种类似于 http 的协议。

标签: java unit-testing mockito


【解决方案1】:

您可以使用 EasyMock(以及其他)来做到这一点。

假设您在一个名为“sendMetrics()”的具体类中有一个函数。该函数的工作是将指标作为参数并将它们发送到 server2。

要对此进行模拟,您将创建一个定义 sendMetrics() 函数的接口,让上述具体类实现该接口,然后使用 EasyMock 创建该接口的 Mock 实现。

然后,在您的测试中,您告诉 EasyMock 期待调用 sendMetrics(),并在调用时返回您定义的“成功”值。

编辑 你的问题特别说“我需要模拟测试这个案例”,它说“如何对我的功能进行单元测试......”。所以,我假设你在谈论单元测试。然而,根据您的评论(以及“...以便我知道 server2 接收到信息”)听起来您想要执行集成测试。

请记住,单元测试和集成测试之间是有区别的。我描述了一个带有模拟的单元测试。 Mock 基本上就像在说“好的单元测试,让我们假设 Server2 工作正常,这样如果你调用它,它就会返回一个满意的结果”。大概您也想对 Server2 进行单元测试,也许还需要使用 Mocks(“好的,Server2,让我们假设 Server1 发送了逻辑数据......”)。您还可以使用 Mocks 进行负面测试,这将由您自己解决。验证“真实案例”听起来像是集成测试(即 Server1 实际连接到 server2)。

请澄清。

【讨论】:

  • 谢谢科迪。我不明白您的测试如何在实际情况下进行验证,从 server1 调用 sendMetric() 将为 server2 创建正确的信息?在您的解决方案中,mock 在任何情况下都会返回“成功”。
  • 我在上面的“编辑”部分做出了回应
  • 嗨,Cody:我的意思是单元测试。我想验证server1生成的信息是否正确。例如:假设它收到了一个请求。使用条件A,它将发送(“条件A:1”)而不是(“条件B:1”)。我想我意识到了差异。现在进行集成和单元测试。谢谢。我会这样做:1),生成一个expected_report="conditionA:1"; 2)定义一个actual_report,它一开始是空的; 3) 定义一个模拟,以便如果调用函数 foo(actual_report),则返回条件A; 3) 调用 foo(actual_report);断言(实际报告与预期报告相同)
  • 是的,看起来差不多。如果您发现我的帮助有帮助,我们将不胜感激支持和/或绿色复选标记 :)
猜你喜欢
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多