Тест singleService приложения Spring работает со встроенным брокером, но не с брокером контейнера - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь запустить singleServiceTest (тип интеграционного тестирования) в моем приложении springboot с ActiveMQ. Есть два способа запустить это:

1) либо с помощью задачи gradle:

task singleServiceTests(type: Test, group: 'Test', dependsOn: ['startActiveMqInstances', 'startApp']) {
    description 'Executes only single service tests.'

    include '**/singleservicetest/**'

    mustRunAfter integrationTests
    systemProperty("broker.url", brokerUrl)
    println("active spring profiles $activeSpringProfiles")

    systemProperties['http.proxyHost'] = System.getProperty("http.proxyHost")
    systemProperties['http.proxyPort'] = System.getProperty("http.proxyPort")
    systemProperties['https.proxyHost'] = System.getProperty("https.proxyHost")
    systemProperties['https.proxyPort'] = System.getProperty("https.proxyPort")
    systemProperties['http.nonProxyHosts'] = System.getProperty("http.nonProxyHosts")

    jvmArgs = ["-Xms96m", "-Xmx96m"]
}

, которая запускает и приложение, и встроенный borker (ActiveMQ), а затем выполняет все тесты.

2) Или запустить приложение отдельно в IntelliJ или командной строке, как при использовании

bootRun {
    if (project.hasProperty('server.port')) {
        systemProperty('server.port', project.property('server.port'))
    } else {
        systemProperty('server.port', project.ext.applicationPort)
    }

    systemProperty 'application.name', 'benefits-selection-rest'
    jvmArgs = ["-Xms192m", "-Xmx192m"]

    systemProperties['http.proxyHost'] = System.getProperty("http.proxyHost")
    systemProperties['http.proxyPort'] = System.getProperty("http.proxyPort")
    systemProperties['https.proxyHost'] = System.getProperty("https.proxyHost")
    systemProperties['https.proxyPort'] = System.getProperty("https.proxyPort")
    systemProperties['http.nonProxyHosts'] = System.getProperty("http.nonProxyHosts")
}

target, а затем запустить тест отдельно в IntelliJ.

Итак, я ' d запустите что-то вроде

gradlew bootRun -Dhttp.proxyHost=xxx -Dhttp.proxyPort=xxx -Dhttps.proxyHost=xxx -Dhttps.proxyPort=xxx -Dhttp.nonProxyHosts=127.0.0.1 -Dspring.profiles.active=sst -Dserver.port=8282

, чтобы запустить приложение, а затем запустите тест в IntelliJ с такими параметрами, как

-ea
-Dapplication.name=benefitsselection-rest
-Dhttp.proxyHost=xxx
-Dhttp.proxyPort=xxx
-Dhttps.proxyHost=xxx
-Dhttps.proxyPort=xxx
-Dhttp.nonProxyHosts=localhost|127.0.0.1
-Dserver.port=8282
-DsingleService.base.url=8282
-Dspring.profiles.active=sst,testap

Проблема в том, что когда я запускаю тест с помощью подхода 1) , и приложение, и тесты используют один и тот же встроенный брокер, и все работает нормально.

Однако, когда я использую подход 2), связь между приложением и тестом отсутствует. В журналах приложений ничего нет, и я не вижу никаких новых сообщений, отправляемых брокеру (так что я предполагаю, что это тест, который не может использовать брокера).

Моя изобретательность подошла к концу. как исследовать и решить эту проблему. Я попытался установить и переустановить ActiveMQ, настроив параметры и т. Д. c, но безуспешно.

Кто-нибудь испытывал нечто подобное или имел какие-либо предложения относительно того, что еще я могу попробовать решить эту проблему со связью?

...