Spring集成:测试与轮询器相关的逻辑

时间:2017-12-15 13:12:50

标签: spring testing spring-integration

我想知道如何编写spring测试来断言由SourcePollingChannelAdapter'触发的逻辑链。

我想到了什么:

  • 使用Thread.sleep(),这对测试来说真是个坏主意
  • 有另一个测试版本的spring上下文,我将用直接替换所有可轮询的通道。这需要做很多工作。

是否有任何常用方法可以在测试中强制执行触发器轮询?

1 个答案:

答案 0 :(得分:2)

通常我们在测试中使用QueueChannel并通过其receive(10000)方法等待消息。这样,独立于数据源,我们的测试方法线程将被阻止,直到数据到达。

SourcePollingChannelAdapterTaskScheduler触发,因此整个流逻辑在与测试方法不同的线程内完成。我的意思是你关于更换频道的想法不会有帮助。 Thread.sleep()可能有价值,但QueueChannel.receive(10000)非常可靠,因为我们真的最大只等待那10秒。

阻止测试用例的另一种方法来自标准CountDownLatch,您可以在流程中的某个位置countDown()并在测试方法中等待它。

还有一些其他测试方法:在迭代之间设置一些睡眠时间较短的循环,并检查一些条件以退出并验证。在最终的轮询器和数据库的情况下,这可能是有用的。因此,我们将在该循环中执行SELECT直到所需的状态。

您可以在Reference Manual中找到一些其他信息。