我想知道如何编写spring测试来断言由SourcePollingChannelAdapter'触发的逻辑链。
我想到了什么:
是否有任何常用方法可以在测试中强制执行触发器轮询?
答案 0 :(得分:2)
通常我们在测试中使用QueueChannel
并通过其receive(10000)
方法等待消息。这样,独立于数据源,我们的测试方法线程将被阻止,直到数据到达。
SourcePollingChannelAdapter
由TaskScheduler
触发,因此整个流逻辑在与测试方法不同的线程内完成。我的意思是你关于更换频道的想法不会有帮助。 Thread.sleep()
可能有价值,但QueueChannel.receive(10000)
非常可靠,因为我们真的最大只等待那10秒。
阻止测试用例的另一种方法来自标准CountDownLatch
,您可以在流程中的某个位置countDown()
并在测试方法中等待它。
还有一些其他测试方法:在迭代之间设置一些睡眠时间较短的循环,并检查一些条件以退出并验证。在最终的轮询器和数据库的情况下,这可能是有用的。因此,我们将在该循环中执行SELECT直到所需的状态。
您可以在Reference Manual中找到一些其他信息。