Java >> Java tutorial >  >> Java

Arquillian Chameleon for enkelhedens skyld

Når du bruger Arquillian, er en af ​​de ting, du skal gøre, at definere, under hvilken container du vil udføre alle dine tests.

Og dette gøres ved at tilføje en afhængighed i klassestien for adapteren og afhængigt af den anvendte tilstand (indlejret, administreret eller ekstern) at skulle downloade t applikationsserveren manuelt. For eksempel sker dette, når Wildfly bruges i indlejret eller administreret tilstand.

Et eksempel på en pom.xml Brug af Wildfly kunne være:

<dependencies>
  <dependency>
    <groupId>org.wildfly</groupId>
      <artifactId>wildfly-arquillian-container-managed</artifactId>
      <version>${version.org.wildfly}</version>
      <scope>test</scope>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>unpack</id>
          <phase>process-test-classes</phase>
          <goals>
            <goal>unpack</goal>
          </goals>
          <configuration>
            <artifactItems>
              <artifactItem>
                <groupId>org.wildfly</groupId>
                <artifactId>wildfly-dist</artifactId>
                <version>${version.org.wildfly}</version>
                <type>zip</type>
                <overWrite>false</overWrite>
                <outputDirectory>${project.build.directory}</outputDirectory>
             </artifactItem>
            </artifactItems>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Bemærk, at du i tidligere script skal definere Arquillian adapter, i dette tilfælde den administrerede, og brug maven-dependency-plugin for at downloade Wildfly distributionsfil brugt af Arquillian .

Denne tilgang er god, og den virker, men den har tre ulemper:

  1. Du skal gentage alle disse linjer i hvert build-script, du vil brugeArquillian og Wildfly.
  2. Hvis du skal bruge en anden applikationsserver i et andet projekt, skal du vide, hvilken adapterartefakt der kræves, og om det er nødvendigt at downloade  artefakterne eller ej. For eksempel i tilfælde af Jetty embedded er det ikke nødvendigt at downloade nogen distribution, du skal kun indstille den indlejrede afhængighed.
  3. Hvis du vil teste din kode mod flere applikationsservere, har du problem nummer 2 plus begynde at beskæftige dig med profiler.
Men alle disse problemer kan løses ved hjælp af Arquillian Chameleon . Arquillian Kamæleon er en generisk beholder, der læser fra arquillian.xml hvilken container, hvilken version og hvilken tilstand du vil bruge i dine tests, og han vil tage sig af at tilføje påkrævet adapter i klassestien, downloade enhver påkrævet distribution og konfigurere protokollen (det er noget du som bruger ikke bør røre ved). Sådan bruger du Arquillian Chameleon er ret nemt. Gør hvad du normalt ville gøre, såsom at tilføje Arquillian bom og tilføj Chameleon Container i stedet for enhver applikationsserverspecifik artefakt:
<dependency>
  <groupId>org.arquillian.container</groupId>
  <artifactId>arquillian-container-chameleon</artifactId>
  <version>1.0.0.Alpha7</version>
  <scope>test</scope>
</dependency>

Opret derefter i src/test/resources Arquillian konfigurationsfil kaldetarquillian.xml med næste konfiguration:

<?xml version="1.0"?>
<arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://jboss.org/schema/arquillian"
            xsi:schemaLocation="http://jboss.org/schema/arquillian
    http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

    <container qualifier="chameleon" default="true">
        <configuration>
            <property name="chameleonTarget">wildfly:9.0.0.Final:managed</property>
        </configuration>
    </container>

</arquillian>

Bemærk, at du nu kun behøver at bruge en venlig ejendom kaldet chameleonTarget for at definere hvilken beholder, version og tilstand du vil bruge. I tidligere eksempelWildfly 9.0.0.Final med administreret adapter.

Når du kører en test med denne konfiguration, Chameleon vil kontrollere, om Wildfly 9.0.0.Den endelige distribution er downloadet, og hvis den ikke downloades, vil den administrerede adapter til Wildfly 9.0.0 tilføjes til classpath og til sidst udføre testen som enhver anden Arquillian test.

Hvad sker der, hvis du vil bruge Payara i stedet for Wildfly? Du behøver kun at ændre chameleonTarget ejendom til payara:4.1.1.163:managed, for for eksempel at køre test mod Payara 4.1.1 i administreret tilstand.

TIP:Du kan indstille denne egenskab ved hjælp af en Java-systemegenskab (-Darq.container.chameleon.chameleonTarget = payara:4.1.1.163:managed) I øjeblikket understøttes næste containere af Chameleon :

  • JBoss EAP 6.x, 7.x
  • WildFly 10.x, 9.x, 8.x
  • JBoss AS 7.x
  • GlassFish 3.1.2, 4.x
  • Payara 4.x

Vi bliver ved med at lære,
Alex.

Jeg kan se dig, din brune hud skinner i solen, jeg ser dig gå rigtig langsomt(Sommerens drenge – Ataris)

Musik: https://www.youtube.com/watch?v=Qt6Lkgs0kiU


Java tag