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

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

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

Тестирование плагинов Maven – По-современному (Серия из 6 частей)

В предыдущей части серии – Тестирование плагинов Maven – Современным способом – Часть IV мы рассмотрели, как определить цели для запуска Maven. В этой части мы более подробно рассмотрим, как мы можем определить системные свойства для используемого вызова Maven.

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

@MavenJupiterExtension
class BaseIT {

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

Это приведет к запуску Maven с целью проверить . Итак, что бы вы сделали, чтобы предотвратить запуск модульных тестов или даже каких-либо тестов вообще в рамках этого интеграционного теста? Что бы вы обычно делали в обычной командной строке? Вы бы добавили -DskipTests в вашу командную строку Maven. Как вы могли бы выполнить приведенный выше пример интеграционного теста? Очень просто, вот так:

@MavenJupiterExtension
class PropertyIT {

  @MavenTest
  @MavenGoal("verify")
  @SystemProperty("skipTests")
  void goal_clean_skiptests (MavenExecutionResult result) {
     ...
  }
}

Это означает, что в конце концов Maven будет вызываться следующим образом:

mvn -DskipTests verify

Давайте сделаем еще один шаг и посмотрим, как написать тестовый пример для плагина, который должен называться так:

mvn ...:failure -DexecutionException=true -Dexception="This is the value of exception."

Вышесказанное можно было бы выразить так:

@MavenJupiterExtension
class PropertyIT {

  @MavenTest
  @MavenGoal("clean")
  @MavenGoal("${project.groupId}:${project.artifactId}:${project.version}:failure")
  @SystemProperty(value = "executionException", content = "true")
  @SystemProperty(value = "exception", content = "This is the value of exception.")
  void goal_failure_execution(MavenExecutionResult result) {
     ...
  }
}

Здесь вы можете увидеть две вещи. Во-первых, вы можете повторить @SystemProperty для определения нескольких системных свойств, а во-вторых, вы можете четко разделить имя и значение свойства.

Как вы уже могли ожидать, вы можете создать мета-аннотацию, в которой вы можете объединить свойства, использованные в предыдущем примере, в эту единую мета-аннотацию:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RUNTIME)
@Inherited
@SystemProperty(value = "executionException", content = "true")
@SystemProperty(value = "exception", content = "This is the value of exception.")
public @interface ExecutionException {
}

Если пересмотреть это, то это будет слишком коротко, потому что это можно сделать лучше вот так:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RUNTIME)
@Inherited
@MavenTest
@MavenGoal("clean")
@MavenGoal("${project.groupId}:${project.artifactId}:${project.version}:failure")
@SystemProperty(value = "executionException", content = "true")
@SystemProperty(value = "exception", content = "This is the value of exception.")
public @interface FailureGoalWithExecutionException {
}

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

@MavenJupiterExtension
class PropertyIT {

  @FailureGoalWithExecutionException
  void goal_failure_execution(MavenExecutionResult result) {
     ...
  }
}

Вы можете определить предыдущую описанную мета-аннотацию в пример проекта и посмотрите, каково это – пользоваться им.

Исходя из удобства, вы, конечно, можете создать мета-аннотацию, подобную этой:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RUNTIME)
@Inherited
@SystemProperty("skipTests")
public @interface MavenSkipTests {
}

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

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

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

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

Тестирование плагинов Maven – По-современному (Серия из 6 частей)

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