Модульный тест приложения Spring Boot JMS оставляет сообщения в очереди

У меня есть приложение spring boot JMS, которое во время запуска загружает несколько очередей WebShpere MQ и копирует сообщения из этих очередей в другую очередь. Все работает, но я начинаю некоторые модульное тестирование, и я думаю, что есть пара вещей, которые я не понимаю. Таким образом, у меня есть класс config, который содержит кучу аннотированных бобов, один из этих бобов-класс, который выполняет загрузку сообщения перед запуском моего 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, что просто проверю, что они равны и сделаны. Но запуск этого как модульного теста запускает все мое приложение, и так как у меня есть боб, который делает подключения к очереди и загружает очередь, этот модульный тест делает подключения к очереди и загружает очередь. Но тогда мой JMSListener никогда не запускается, поэтому все просто остается в очереди, и я должен вручную очистить его. Это недопустимо.

Из того, что я понимаю о Spring Boot, @SpringApplicationConfiguration()берет основной класс, который будет иметь контекст приложения, и Test runner запускает приложение, как обычно. Если это так, я не уверен, как идти о модульном тестировании, если он собирается загружать мою очередь каждый раз и никогда не читает их. Любые предложения или концепции, чтобы уточнить, чтобы помочь мне увидеть более ясно?

1 ответ

  1. Так что я не уверен, если это просто Хак вокруг функциональности или если это просто просто правильная вещь, чтобы сделать. Я просто настроил @Beforeи @Afterи в основном просто очистить очередь, чтобы убедиться, что когда-либо модульный тест может поставить на него всегда снимает его.

    Если кто-то решит внести свой вклад в обмен знаниями о том, что именно происходит и как работать с основой более соответствующим образом, это все равно будет оценено. В противном случае я ожидаю, что сообщение упадет на дно интернета, чтобы никогда не быть замеченным снова.