如何为异步交互的系统编写集成测试

时间:2011-03-01 10:31:02

标签: integration-testing

假设我有一个名为PlaceOrder的函数,调用时会将订单详细信息插入本地数据库并将消息(订单详细信息)放入TIBCO EMS队列中。

收到消息后,TIBCO BW将调用其他系统(比如ExternalSystem)传递订单详情。

现在我编写集成测试的方式是

  1. 致电下订单
  2. 睡眠,并检查本地数据库中的详细信息
  3. 在ExternalSystem中存在睡眠和检查详细信息。
  4. 上述方法是否正确?以上测试让我相信,端到端集成正在运行,但有没有更好的方法来测试上述场景?

1 个答案:

答案 0 :(得分:2)

您描述的问题很常见,您的方法是一种非常典型的解决方案。

这个解决方案的问题是,如果延迟太短,你的测试有时可能会通过,有时会失败,但如果延迟很长,那么你只是浪费时间等待,并且通过许多测试,它可以添加一个很多延迟。但除非你能得到一些信号告诉你订单到达数据库,否则你只需要等待。

您可以通过短时间间隔进行大量检查来减少延迟。如果您在超时后订单不存在,那么您将无法通过测试。

在“以测试为导向的日益增长的面向对象软件”*中,有一章关于这个主题,所以如果您要进行大量的此类测试,您可能需要获得一份副本。

  

“测试可以通过两种方式观察系统:通过对其可观测量进行采样   状态或通过侦听它发出的事件。其中,抽样是   通常是唯一的选择,因为许多系统不发送任何监控   事件。测试包含两种交互技术是很常见的   与其系统的不同“目的”“

(*)http://my.safaribooksonline.com/book/software-engineering-and-development/software-testing/9780321574442