Разделение интеграционных тестов в приложении весенней загрузки - PullRequest
0 голосов
/ 29 апреля 2020

Я пишу тесты для приложения SpringBoot. Я хотел бы отделить интеграционные тесты от юнит-тестов. Теперь структура моего проекта выглядит примерно так:

├── Demo
│   ├── src
│   │   ├── main
|   |   |   └──java
│   │   ├── test
|   |   |   └──java

Есть ли способ добавить такой модуль:

├── Demo
│   ├── src
│   │   ├── main
|   |   |   └──java
│   │   ├── integrationTest
|   |   |   └──java
│   │   ├── test
|   |   |   └──java

Я бы хотел, чтобы этот новый модуль интеграцииTest действовал так же, как тестовый модуль, но я не знаю, как его настроить. Мне удалось добавить его как модуль, пометитьgrationTest / java dir как Test Sources Root и запустить в нем тестирование, но @SpringBootTest не может разрешить ApplicationContext, и все мои bean-компоненты всегда равны нулю.

Когда я пишу тот же тест в тестовом модуле, он работает нормально.

Есть ли способ сделать это? Это правильный способ разделения интеграционных тестов? Если нет, то какова лучшая практика?

Я работаю в intelliJ и использую gradle в качестве менеджера пакетов.

1 Ответ

1 голос
/ 30 апреля 2020

Вы можете получить их с остальными тестами; примените соглашение и сопоставьте теги, чтобы отфильтровать их, что-то вроде добавления IntegrationTest к именам классов и использования того же значения для JUnit @Tag ... затем просто определите / объявите некоторые задачи Gradle для их выполнения:

test {
  useJUnitPlatform()
}

task integrationTests(type: Test) {
  filter { includes = ["IntegrationTest"] }
  useJUnitPlatform()
}

task unitTests(type: Test) {
  filter { includes = ["UnitTest"] }
  useJUnitPlatform()
}

Полный пример:

package tld.domain.support;

public final class Category {
  public static final INTEGRATION_TEST = "IntegrationTest";

  public static final UNIT_TEST = "UnitTest";
}
import tld.domain.support.Category;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Tag(Category.INTEGRATION_TEST)
final class MyIntegrationTest {
  @Test
  void testFoo() {
    // ...
  }
...