Рубрики
Без рубрики

Тестирование плагинов Maven – Современным способом – Часть VI

В предыдущей части серии – Тестирование плагинов Maven – По-современному – Часть V мы видели, как это делается… Помечено как программирование, java, maven, тестирование.

В предыдущей части серии – Тестирование плагинов Maven – По-современному – Часть V мы рассмотрели, как определить системные свойства для запуска Maven. В этой части мы более подробно рассмотрим, как мы можем определить профиль (профили) для использования вызова Maven.

Давайте взглянем на простой пример, взятый из предыдущей части.

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  void the_first_test_case(MavenExecutionResult result) {
     ...
  }
}

Это приведет к запуску Maven с целью verify . В реальной жизни иногда имеет смысл запускать интеграционные тесты, только активировав подобный профиль:

mvn verify -Prun-its

Итак, вопрос сейчас в том,: Как мы можем это сделать в рамках интеграционного тестирования] МФТ ? Этого можно достичь с помощью аннотации @MavenProfile , подобной этой:

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  void the_first_test_case(MavenExecutionResult result) {
     ...
  }
}

Это позволило бы выполнить нашу интеграцию со следующей командной строкой (за исключением того, что мы упоминали в предыдущих частях серии; Просто опустили их для краткости.):

mvn verify -Prun-its

В следующем примере вы можете видеть, что аннотация @MavenProfile используется только для метода first :

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void third(MavenExecutionResult result) {
     ...
  }
}

Это приведет к выполнению всех вышеперечисленных интеграционных тестовых примеров, кроме first без профиля.

Аннотация @MavenProfile может быть помещена в разные методы для запуска другого профиля в разных тестовых примерах, подобных этому:

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  @MavenProfile("run-e2e")
  void third(MavenExecutionResult result) {
     ...
  }
}

В приведенном выше примере будет выполнен тестовый пример третий с заданным профилем run-e2e , активированным в командной строке, и, конечно же, первый тестовый пример с заданным профилем run-its .

Бывают случаи, когда необходимо выполнить несколько интеграционных тестов с одним и тем же профилем, что может быть достигнуто путем определения аннотации @MavenProfile на уровне класса следующим образом:

@MavenJupiterExtension
@MavenProfile("run-its")
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void third(MavenExecutionResult result) {
     ...
  }
}

Это приведет к выполнению всех трех тестовых примеров с использованием одного и того же профиля. Теперь давайте подумаем о другом сценарии. Вы определили набор интеграционных тестов (предположим, 25) и создали соответствующий тестовый класс на основе приведенного выше шаблона. Теперь вам нужно добавить один тестовый пример, который не должен использовать профиль, определенный на уровне класса. Он должен использовать другой.

Для этого есть два решения. Первым из них было бы создание отдельного класса интеграционных тестов, который определяет соответствующий профиль на уровне класса – или на уровне метода (это вопрос вкуса). Другим решением было бы определить другой метод тестового примера с другой аннотацией @MavenProfile , как показано в следующем примере:

@MavenJupiterExtension
@MavenProfile("run-its")
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  void first(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  @MavenProfile("run-somethingdifferent")
  void second(MavenExecutionResult result) {
     ...
  }

  @MavenTest
  void third(MavenExecutionResult result) {
     ...
  }
}

Результатом будет выполнение тестовых примеров сначала и третий с -Prun-its профилем и второй тестовый пример будет выполнен с run-somethingdifferent профилем. Другими словами, это означает, что определенные профили не являются аддитивными. Позвольте мне показать пример ограничения этой концепции. Если вы хотите, чтобы второй тестовый пример выполнялся вообще без профиля, это невозможно.

Кроме того, бывают случаи, когда полезно определить несколько профилей в сборке Maven, подобной этой:

mvn -Prun-its,run-e2e

Это также можно сделать с помощью нескольких аннотаций @MavenProfile в соответствующем тестовом примере (или на уровне класса), например:

@MavenJupiterExtension
class BaseIT {

  @MavenTest
  @MavenGoal("verify")
  @MavenProfile("run-its")
  @MavenProfile("run-e2e")
  void the_first_test_case(MavenExecutionResult result) {
     ...
  }
}

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

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RUNTIME)
@Inherited
@MavenProfile("run-its")
@MavenProfile("run-e2e")
public @interface ExecuteIntegrationAndEndToEnd {
}

Это не ограничивается аннотацией @MavenProfile . Вы можете объединить это с аннотацией типа @MavenGoal и т.д., Как упоминалось в предыдущих статьях серии.

Итак, это для части VI. Если вы хотите узнать больше о Платформе интеграционного тестирования , вы можете ознакомиться с руководством пользователя . Если вы хотите узнать о состоянии выпуска, вы можете заглянуть в примечания к выпуску .

Если у вас есть идеи, предложения или обнаруженные ошибки, пожалуйста, напишите в выпуске на github .

Пример проекта, который показывает предыдущий пример, можно найти на GitHub .

Оригинал: “https://dev.to/khmarbaise/maven-plugin-testing-in-a-modern-way-part-vi-4b1d”