Модуль Gradle, зависящий от модуля Spring Boot, отказывается запускать веб-среду - PullRequest
0 голосов
/ 25 марта 2020

У меня есть веб-приложение Spring Boot в качестве модуля Gradle foo. (на самом деле они разделены на несколько модулей, но для простоты давайте рассмотрим их как один модуль).

Теперь я хотел бы добавить интеграционные тесты каратэ как отдельный модуль Gradle это зависит от приложения Spring Boot. Давайте назовем это bar. Он должен работать как тесты JUnit и запускать веб-среду Spring Boot на произвольном порту.

Я достиг этого следующим образом:

foo Веб-приложение Spring Boot build.gradle:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

foo Точка входа в Spring Boot:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

bar Модуль интеграционных испытаний build.gradle

dependencies {
    implementation project(':foo')

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

bar Образец интеграционных испытаний

@SpringBootTest(classes = MyApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class BarTest {

    @LocalServerPort
    int serverPort;

    @Test
    void test() {
        // Simple example. This will run all the complex integration tests
        assertEquals(8080, serverPort);
    }
}

Обратите внимание, как тест интеграции в bar ссылается на основную точку входа приложения MyApplication в foo в аннотации @SpringBootTest.

Теперь возникает странная часть: Это работает нормально, когда я запускаю тест из моей IntelliJ IDE, но не работает, когда я запускаю из Gradle

Если я запускаю тест из моей IDE, первые строки показывают это:

10:12:03.327 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [BarTest], using SpringBootContextLoader

Затем он продолжает раскручивать веб-контекст, пока он не будет полностью загружен и тест не пройден.

Но если я запускаю его из Gradle с --info, я вижу вместо этого следующее:

10:14:06.226 [Test worker] INFO org.springframework.test.context.support.DefaultTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [BarTest], using DelegatingSmartContextLoader

Он не раскручивает веб-контекст, и тест не пройден из-за невозможности внедрения @LocalServerPort

Похоже, он использует неправильный TestContextBootstrapper. Как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...