4. Nástroje a integrace

4.1. Maven a unit testy

Maven nás doslova „nutí“ do testování a psaní testů tím, že za nás vytvoří složky pro testy (src/test/java/) a testy spouští ještě před zabalením výsledného projektu (mvn package). Navíc standardně, pokud testy selžou nebo skončí chybou, projekt se nesestaví.

Jak už je u Maven obvyklé, testy provádí ve skutečnosti plugin maven-surefire-plugin. Ten podporuje JUnit i TestNG framework. Výsledkem testu je report v textové a XML podobě v target/surefire-reports/ určený k dalšímu zpracování.

4.1.1. HTML report z výsledků

Tyto zdrojové soubory výsledků testů nejčastěji chceme zobrazit jako HTML report. K tomu slouží další plugin maven-surefire-report-plugin.

Pokud chceme tento výstup vytvořit v rámci lifecycle site (neboli mvn site), přidejte do pom.xml:

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-report-plugin</artifactId>
            <version>2.16</version>   <!-- latest at the time of writing -->
        </plugin>
        ...
     </plugins>
     ...
</reporting>

Jen HTML výsledky testů můžete vygenerovat pomocí

mvn surefire-report:report

4.1.2. Přidání/vyloučení testů

Během test phase se Surefire pokusí provést testy v src/test/java/. Pomocí elementů <includes> a <excludes> v <build> POM souboru můžeme jednotlivé testy dodatečně přidávat nebo odebírat. Je povoleno používat zástupné znaky

  • ** – kdekoli v hiearchii složek
  • * – libovolných nebo více znaků

Např. vyloučit všechny testy začínající na Dummy:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</group>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.16</version>
            <configuration>
                <excludes>
                    <exclude>**/Dummy*.java</exclude>
                </excludes>
            </configuration>
        </plugin>
        ...
    </plugins>
    ...
</build>

Důležité

Pozor na to, že Maven surefire plugin defaultně spouští jen testy (třídy testů), které se začínají na Test, končí na Test nebo TestCase! Nemusíme nic dělat, pokud dodržujeme konvenci a třídy pojmenováváme NěcoTest.

Pokud chceme testovat všechny Java soubory v src/test/java/ bez ohledu na jejich název můžeme změnit nastavení surefire pluginu:

<configuration>
    <!-- Run Java classes of any name, not only *Test, Test* or *TestCase -->
    <includes>
        <include>**/*.java</include>
    </includes>
</configuration>

4.1.3. Přeskočení testů

Použijte volbu -Dmaven.test.skip=true, např.:

mvn clean package -Dmaven.test.skip=true

4.1.4. Spuštění jen jednoho testu

Pro spuštění jen jediného testu použijte:

mvn -Dtest=TridaTestu test

4.2. Maven a Jenkins CI

Maven tvoří s CI serverem Jenkins skvělý pár. Díky tomu, že Maven sjednocuje build jakéhokoli projektu na několik standardizovaných fází může Jenkins snáze nabídnout podporu Maven projektů. Maven plugin je navíc již dodáván přímo s Jenkins.

Postup není složitý:

  1. Stáhneme a spustíme Jenkins z WAR souboru:

    $ java -jar jenkins.war
    

    nebo nainstalujeme balíček pro svůj OS.

  2. Běžne na http://localhost:8080/.

  3. V Manage Jenkins ‣ Configure System ‣ Maven Installations nastavíme cestu k existující instalaci Maven nebo využijeme schopnost Jenkins - stáhnout si Maven automaticky.

    /static/books_static/MVN/_images/jenkins-nastaveni-cestky-k-maven.png

    Nastavení cesty k instalaci Maven v Jenkins CI

  4. Založíme nový projekt typu Maven 2/3 běžným způsobem.

  5. Funkčnost si zkontrolujeme v konzolovém výstupu jobu.

    /static/books_static/MVN/_images/jenkins-job-console-output.png

    Příklad výstupu sestavování Maven projektu v Jenkins CI