Spring 引导 JMS 应用程序的单元测试将消息留在队列中
Unit Test of Spring Boot JMS Application Leaves Messages on Queue
我有一个 spring 引导 JMS 应用程序,它在启动期间加载多个 WebShpere MQ 队列并将消息从这些队列复制到另一个队列。一切正常,但我正在开始一些单元测试,我认为有几件事我不理解。所以我有一个配置 class,它包含一堆带注释的 bean,其中一个 bean 是 class,它在我的 JMSListener 启动之前加载消息。我有简单的单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ErrorQueueReportApplication.class)
@ActiveProfiles(profiles = "DEV")
public class CastsApplicationTests {
static Logger logger = LogManager.getLogger(CastsApplicationTests.class.getName());
@Value("${hostname}")
String host;
@Test
public void testEcsProps(){
System.out.println("Running test");
assertEquals("hostname.someTLD", host);
}
}
这个测试通过了,但我只希望简单地检查我的 @Value
看看它们是否相等并且完成了。但是 运行 这作为一个单元测试启动了我的整个应用程序,并且因为我有一个建立队列连接和加载队列的 bean,所以这个单元测试建立了队列连接并加载了一个队列。但是后来我的 JMSListener 永远不会启动,所以一切都留在队列中,我必须手动清除它。这是不可接受的。
根据我对 Spring 引导的了解,@SpringApplicationConfiguration()
获取将具有应用程序上下文的主要 class,并且测试运行器像往常一样启动应用程序。如果是这种情况,我不确定如何进行单元测试,如果它每次都会加载我的队列并且从不读取它们。有什么建议或概念可以澄清以帮助我看得更清楚吗?
所以我不确定这是否只是围绕功能的黑客攻击,或者它是否只是正确的做法。我只是设置了一个 @Before
和一个 @After
并且基本上只是清除队列以确保单元测试可能放在它上面的任何东西总是把它取下来。
如果有人决定就到底发生了什么以及如何更相应地使用框架进行知识共享,我们将不胜感激。否则我希望 post 会掉到互联网的底部,再也不会出现。
我有一个 spring 引导 JMS 应用程序,它在启动期间加载多个 WebShpere MQ 队列并将消息从这些队列复制到另一个队列。一切正常,但我正在开始一些单元测试,我认为有几件事我不理解。所以我有一个配置 class,它包含一堆带注释的 bean,其中一个 bean 是 class,它在我的 JMSListener 启动之前加载消息。我有简单的单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = ErrorQueueReportApplication.class)
@ActiveProfiles(profiles = "DEV")
public class CastsApplicationTests {
static Logger logger = LogManager.getLogger(CastsApplicationTests.class.getName());
@Value("${hostname}")
String host;
@Test
public void testEcsProps(){
System.out.println("Running test");
assertEquals("hostname.someTLD", host);
}
}
这个测试通过了,但我只希望简单地检查我的 @Value
看看它们是否相等并且完成了。但是 运行 这作为一个单元测试启动了我的整个应用程序,并且因为我有一个建立队列连接和加载队列的 bean,所以这个单元测试建立了队列连接并加载了一个队列。但是后来我的 JMSListener 永远不会启动,所以一切都留在队列中,我必须手动清除它。这是不可接受的。
根据我对 Spring 引导的了解,@SpringApplicationConfiguration()
获取将具有应用程序上下文的主要 class,并且测试运行器像往常一样启动应用程序。如果是这种情况,我不确定如何进行单元测试,如果它每次都会加载我的队列并且从不读取它们。有什么建议或概念可以澄清以帮助我看得更清楚吗?
所以我不确定这是否只是围绕功能的黑客攻击,或者它是否只是正确的做法。我只是设置了一个 @Before
和一个 @After
并且基本上只是清除队列以确保单元测试可能放在它上面的任何东西总是把它取下来。
如果有人决定就到底发生了什么以及如何更相应地使用框架进行知识共享,我们将不胜感激。否则我希望 post 会掉到互联网的底部,再也不会出现。