Тестирование плагинов 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”