如何测试在弹簧集成中使用通道的热文件夹?
Posted
技术标签:
【中文标题】如何测试在弹簧集成中使用通道的热文件夹?【英文标题】:how to test a hotfolder that use channels in spring-integration? 【发布时间】:2019-06-10 22:15:36 【问题描述】:在 spring-integretion 项目中,我有一个热文件夹,用于检测何时将 csv 放入文件夹并做一些额外的事情,我有一个与通道连接的入站通道适配器。
入站通道适配器-> 通道。 检测其放置的 csv 何时收到与其连接的 mns 服务激活器 我要做什么测试只在创建文件时通道接收 mns
我正在使用本教程 https://www.javacodegeeks.com/2013/05/spring-integration-file-polling-and-tests.html 它非常有用,但我可以创建上下文
在允许 TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@57a4d5ee] 准备测试实例 [proyect.integration.hotFolderTest@5af5def9] 时捕获异常 java.lang.IllegalStateException: 无法加载 ApplicationContext
【问题讨论】:
【参考方案1】:您需要显示更多有关此问题的堆栈跟踪,因为目前尚不清楚您的真正问题是什么。
也很高兴分享一些您目前拥有的代码以及您想在测试用例中做什么。
要验证通道中是否存在消息,您可以配置ChannelInterceptor
并实现其preSend()
。
但是,我们也建议使用 @SpringIntegrationTest
之类的 MockIntegration
功能。这样您就可以用一些MockIntegration.mockMessageHandler()
替换您的真实服务激活器并对其执行验证。
您需要在提到的注解上配置一个noAutoStartup
,直到您准备好模拟并调用this.mockIntegrationContext.substituteMessageHandlerFor()
,才轮询目录。
在参考手册中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/testing.html#test-context
【讨论】:
嗨,现在我知道我的问题是,首先我需要验证所有上下文(我在 xml 中定义的)是否需要加载到我创建的测试类中与: >@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "/../resources/hot-folder.xml" ) Artem Bilan 你说得对,我的问题很笼统,那是因为我不知道我在做什么。 但问题是,使用 RunWith 指定 spring 的特殊运行器,使用 ContextConfiguration 指定加载上下文所需的位置或类,在我的情况下,我将路径中的所有 bean /../resources/hot-folder.xml 所以我可以在测试中使用,并且你必须在你带来你的上下文之前验证这个 bean 是否已经创建好以上是关于如何测试在弹簧集成中使用通道的热文件夹?的主要内容,如果未能解决你的问题,请参考以下文章