Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何在每次测试后断开与rabbitmq的连接?_Spring_Amqp_Spring Test_Spring Amqp_Spring Rabbit - Fatal编程技术网

Spring 如何在每次测试后断开与rabbitmq的连接?

Spring 如何在每次测试后断开与rabbitmq的连接?,spring,amqp,spring-test,spring-amqp,spring-rabbit,Spring,Amqp,Spring Test,Spring Amqp,Spring Rabbit,我已经在spring应用程序中集成了rabbitmq。有两个SpringRunner测试断言amqp接收器是否接收到消息。这些测试连接到在单独进程中运行的rabbitmq代理 问题在于,应用程序上下文在第一次测试时加载,并将使用者注册到队列中,但在测试完成后不会断开连接 当第二个测试运行时,它的应用程序上下文也会注册一个使用者,但是作为第二个测试的一部分发送到exchange的任何消息仍然会从第一个测试转到由应用程序上下文注册的使用者 两个测试都按顺序运行 是否有一种方法可以在第二个测试开始之前

我已经在spring应用程序中集成了rabbitmq。有两个SpringRunner测试断言amqp接收器是否接收到消息。这些测试连接到在单独进程中运行的rabbitmq代理

问题在于,应用程序上下文在第一次测试时加载,并将使用者注册到队列中,但在测试完成后不会断开连接

当第二个测试运行时,它的应用程序上下文也会注册一个使用者,但是作为第二个测试的一部分发送到exchange的任何消息仍然会从第一个测试转到由应用程序上下文注册的使用者

两个测试都按顺序运行

是否有一种方法可以在第二个测试开始之前完全终止第一个上下文,以便一次只有一个使用者?还是其他解决问题的方法? 多谢各位


在测试之前尝试@DirtiesContext没有帮助

好吧,老实说,在所有测试类级别上,除了
@RunWith(SpringRunner.class)
,一个
@DirtiesContext
是解决问题的方法

ListenerContainer
是一个活动组件,它启动自己的线程,因此即使您完成了测试,也不意味着后台线程停止。为此,您确实必须在每个测试类上使用
@DirtiesContext
,以确保在完成测试后关闭所有应用程序上下文。它还确保停止这些侦听器容器


仅仅在一个测试类上放置一个
@DirtiesContext
是不够的,因为无法保证调用它们的顺序。因此,在您的测试类中尽可能多地呈现它,以避免这种或类似的争用条件。

@DirtiesContext
如果您使用的是Spring测试上下文,则应该可以工作;编辑问题以显示您的测试和配置。我认为您可以使用
@After
@After-test