Salta el contingut
 

Maven: execució de les proves

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Maven: execució de les proves

Maven permet executar les proves des de la terminal, sense dependre de l'IDE. Això fa possible automatitzar-ne l'execució, per exemple, en un flux de treball de CI/CD.

Execució de les proves unitàries (mvn test)

Maven defineix la fase test, que compila el projecte i hi fa diferents comprovacions, com executar les proves unitàries.

mvn test
Goals de mvn test

S'executen tots els goals definits fins a la fase indicada. Es poden consultar amb l'ordre següent:

mvn help:describe
Goal Plugin Descripció
resources:resources maven-resources-plugin Copia els recursos de l'aplicació
compiler:compile maven-compiler-plugin Compila el codi font
resources:testResources maven-resources-plugin Copia els recursos de les proves
compiler:testCompile maven-compiler-plugin Compila el codi font de les proves
surefire:test maven-surefire-plugin Executa les proves unitàries

Les proves unitàries les executa el plugin maven-surefire-plugin, que es configura en el fitxer pom.xml:

pom.xml
<project>
    ...
    <properties>
        <skip.ut>false</skip.ut> <!-- (1)! -->
    </properties>

    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <!-- JUnit 5 requires Surefire version 2.22.0 or higher -->
                <version>3.5.2</version>
                <configuration>
                    <skipTests>${skip.ut}</skipTests>
                </configuration>
            </plugin>
            ...
        </plugins>
    </build>
</project>
  1. La propietat skip.ut permet ometre l'execució de les proves unitàries. Per defecte, el seu valor és false.

Execució de les proves d'integració (mvn verify)

Maven defineix la fase verify, que compila el projecte i hi fa diferents comprovacions, com executar les proves d'integració.

mvn verify [-Dskip.ut=true] # (1)!
  1. La propietat skip.ut permet ometre l'execució de les proves unitàries.
Goals de mvn verify

S'executen tots els goals definits fins a la fase indicada. Es poden consultar amb l'ordre següent:

mvn help:describe
Goal Plugin Descripció
resources:resources maven-resources-plugin Copia els recursos de l'aplicació
compiler:compile maven-compiler-plugin Compila el codi font
resources:testResources maven-resources-plugin Copia els recursos de les proves
compiler:testCompile maven-compiler-plugin Compila el codi font de les proves
surefire:test maven-surefire-plugin Executa les proves unitàries
package maven-jar-plugin Empaqueta l'aplicació
failsafe:integration-test maven-failsafe-plugin Executa les proves d'integració

Les proves d'integració les executa el plugin maven-failsafe-plugin, que es configura en el fitxer pom.xml:

pom.xml
<project>
    ...
    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            ...
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>3.5.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ...
        </plugins>
    </build>
</project>

Automatització de l'execució de les proves

L'execució de les proves es pot automatitzar mitjançant GitHub Actions – GitHub en les pull requests, per comprovar que la incorporació d'una funcionalitat és correcta.

El flux de treball següent executa primer les proves unitàries i, si passen, les proves d'integració:

.github/workflows/test.yml
name: Test Java with Maven

on:
  push:
    branches: [ "main" ]
  pull_request:
    # Tipus d'esdeveniments de la pull request
    types: [ 'opened', 'edited', 'reopened', 'synchronize', 'ready_for_review' ]
    branches: [ "main", "development" ]
  workflow_dispatch:

jobs:
  unit-test:
    if: github.event_name == 'push' || github.event.pull_request.draft == false

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 21
      uses: actions/setup-java@v3
      with:
        java-version: '21'
        distribution: 'temurin'
        cache: maven
    - name: Run Unit Tests with Maven
      run: mvn --batch-mode test -Dcheckstyle.skip=true

  integration-test:
    needs: unit-test
    if: github.event_name == 'push' || github.event.pull_request.draft == false

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Set up JDK 21
      uses: actions/setup-java@v3
      with:
        java-version: '21'
        distribution: 'temurin'
        cache: maven
    - name: Run Integration Tests with Maven
      run: mvn --batch-mode verify -Dskip.ut=true -Dcheckstyle.skip=true

Requerir l'execució de les proves en les pull requests

A més, es poden configurar les regles de protecció de les branques (rulesets) perquè calga superar les comprovacions abans d'incorporar els canvis (Figura 1).

Regles d'execució de les proves

Figura 1. Regles d'execució de les proves.

Documentació oficial: About rulesets – GitHub

📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.