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

Spring集成:测试轮询器相关逻辑,spring,testing,spring-integration,Spring,Testing,Spring Integration,我想知道如何编写spring测试来断言由“SourcePollingChannelAdapter”触发的逻辑链 我想到的是: 使用Thread.sleep(),这对于测试来说是个坏主意 有另一个SpringContext测试版本,我将用直接通道替换所有可轮询通道。这需要做很多工作 在测试中是否有强制触发轮询器的常用方法?通常,我们在测试中使用队列通道,并通过其接收(10000)方法等待消息。这样,独立于数据源,我们的测试方法线程被阻塞,直到数据到达 SourcePollingChannelA

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

我想到的是:

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

在测试中是否有强制触发轮询器的常用方法?

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

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

另一种阻止测试用例的方法来自标准的
CountDownLatch
,您可以在流中的某个地方使用它,然后在测试方法中等待它

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

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