Статьи

Arquillian Chameleon — Упрощение ваших тестов Arquillian

Arquillian Chameleon был создан, чтобы упростить настройку тестов Arquillian . Я с гордостью сообщаю, что с версией 1.0.0.CR2 мы упростили не только настройку тестов Arquillian, но и их написание.

В этом новом выпуске добавлены три новых упрощения:

  • Вам нужно использовать только 1 (или максимум 2 зависимости на тот случай, если вы хотите использовать функцию автоматического развертывания).
  • Нет необходимости добавлять какие-либо зависимости, чтобы определить, какой сервер приложений вы хотите использовать для запуска тестов. Даже необязательно использовать файл arquillian.xml для его определения.
  • Нет необходимости использовать ShrinkWrap для сборки вашего пакета. Вы все еще можете использовать его, но вы можете делегировать процесс создания пакета для пользовательского SPI.

Итак, начнем.

зависимость

Вам нужно добавить только одну зависимость, вам больше не нужно добавлять Arquillian зависимость + контейнерную зависимость.

 <dependency>
        <groupId>org.arquillian.container</groupId>
        <artifactId>arquillian-chameleon-junit-container-starter</artifactId>
        <version>${arquillian.chameleon.version}</version>
        <scope>test</scope>
</dependency>

Определение контейнера

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

@RunWith(ArquillianChameleon.class)
@ChameleonTarget("wildfly:11.0.0.Final:managed")
public class GameResourceRestApiTest {
}

Вам просто нужно использовать ArquillianChameleon runner и специальную аннотацию @ChameleonTarget, чтобы определить, какой контейнер вы хотите использовать. В этом примере настроена Wildfly 11 с управляемым режимом.

При запуске этого теста для classpath будет настроена зависимость от Arquillian Wildfly , загрузите сервер приложений и ведите себя как любой другой тест Arquillian .

Вы можете узнать больше об этой функции на  https://github.com/arquillian/arquillian-container-chameleon#arquillian-chameleon-runner .

AutoDeployment

Arquillan позволяет вам определить SPI Java, чтобы описать, как архив должен быть создан. Это фактически означает, что метод @Deployment не требуется, если вы предоставляете реализацию, которая автоматически создает файл развертывания.

В настоящее время Arquillian Chameleon предлагает две реализации:

  1. Файл, который развертывает уже созданный файл. Вам необходимо установить местоположение файла.
  2. Maven, который запускается с использованием встроенной Maven сборки проекта и созданного архива, используется в качестве архива развертывания.

В этом примере я собираюсь использовать многомодульный проект в качестве примера, но обратите внимание, что если вы создаете немодульный проект, то по умолчанию работает отлично.

<dependency>
        <groupId>org.arquillian.container</groupId>
        <artifactId>arquillian-chameleon-maven-build-deployment</artifactId>
        <version>${arquillian.chameleon.version}</version>
        <scope>test</scope>
</dependency>
@RunWith(ArquillianChameleon.class)
@ChameleonTarget("wildfly:11.0.0.Final:managed")
@MavenBuild(pom = "../../pom.xml", module = "gamepage/impl")
@DeploymentParameters(testable = false)
public class GameResourceRestApiTest {

    @ArquillianResource
    URL url;
}

Обратите внимание, что в зависимости от выбранного вами метода ( File или Maven ) вам необходимо добавить реализацию в classpath.

В этом случае я выбираю подход Maven, который означает, что архив создается при сборке всего проекта.

Две вещи, которые являются специфическими для этого теста и должны быть настроены (вместо значений по умолчанию) из-за примера.

Во-первых, это место пом. По умолчанию аннотация @MavenBuild использует файл pom.xml, в котором выполняется тест. В случае многомодульного проекта вы не хотите запускать сборку из модуля, в котором определен тест, а из корня проекта, поэтому вы получаете полный архив со всеми зависимостями. Для этого случая вам нужно установить его где находится.

Второй — где находится архив, который будет использоваться для развертывания. По умолчанию вам не нужно ничего указывать, поскольку в случае не многомодульного проекта вы генерируете только один файл. Но в случае многомодульных проектов вы создаете несколько архивов, поэтому вам нужно указать, какой модуль содержит окончательный архив.

И все, когда вы запустите этот тест, Arquillian загрузит Wildfly, запустит его, запустит сборку, чтобы получить окончательный файл развертывания (например, .war), развернет его и, наконец, запустит тест.

Обратите внимание, что также имеется аннотация @DeploymentParameters, которая не является обязательной для использования, но позволяет настраивать развертывание так же, как вы делаете это с аннотацией @Deployment, такой как установка имени развертывания или изменение режима с контейнера (по умолчанию) на клиент.

Вы можете увидеть полный пример здесь .

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

Выводы

Вы можете видеть, что все сильно упростили. Идея состоит в том, чтобы предложить аналогичный опыт, который вы получаете при выполнении тестов Spring.

Продолжай учиться,

Alex