Obiettivo

  1. Informazioni sulle le nozioni di base sul test unitario.
  2. Scopri i framework e gli strumenti comunemente utilizzati per testare il codice AEM.
  3. Informazioni sulle le opzioni per creare risorse AEM fittizie o simulate durante la scrittura di test unitari.

Esperienza pregressa

In questo tutorial verrà illustrato come scrivere test unitari per il modello Sling del componente Byline (creato nella sezione Creazione di un componente AEM personalizzato). I test unitari sono test scritti durante la fase di compilazione in Java™ che verificano il comportamento previsto del codice Java™. Ciascun test unitario è in genere piccolo e convalida l’output di un metodo (o unità di lavoro) in base ai risultati previsti.

Utilizziamo le best practice di AEM insieme a:

Test unitario e Adobe Cloud Manager

Adobe Cloud Manager integra l’esecuzione di test unitari e il reporting sulla copertura del codice nella propria pipeline CI/CD per incoraggiare e promuovere la best practice per il codice AEM dei test unitari.

Anche se il codice del test unitario è una prassi ideale per qualsiasi base di codice, quando si utilizza Cloud Manager è importante sfruttarne i servizi di test e reporting della qualità del codice fornendo test unutario per l’esecuzione di Cloud Manager.

Aggiornare le dipendenze Maven del test

Il primo passaggio consiste nell’esaminare le dipendenze Maven per supportare la scrittura e l’esecuzione dei test. Sono necessarie quattro dipendenze:

  1. JUnit5
  2. Framework di test per Mokito
  3. Apache Sling Mocks
  4. Infrastruttura di test di AEM Mocks (di io.wcm)

Le dipendenze dei test JUnit5, **Mockito e AEM Mocks vengono aggiunte automaticamente al progetto durante l’installazione utilizzando l’archetipo AEM Maven.

  1. Per visualizzare queste dipendenze, apri il POM del reattore principale in aem-guides-wknd/pom.xml, passa a <dependencies>..</dependencies> e visualizza le dipendenze dei test JUnit, Mockito, Apache Sling Mocks e AEM Mock di io.wcm in <!-- Testing -->.

  2. Verifica che io.wcm.testing.aem-mock.junit5 sia impostato su 4.1.0:

    <dependency>
        <groupId>io.wcm</groupId>
        <artifactId>io.wcm.testing.aem-mock.junit5</artifactId>
        <version>4.1.0</version>
        <scope>test</scope>
    </dependency>
    
    ATTENZIONE
    Archetipo 35 genera il progetto con io.wcm.testing.aem-mock.junit5 versione 4.1.8. Effettua il downgrade a 4.1.0 per seguire il resto di questo capitolo.
  3. Apri aem-guides-wknd/core/pom.xml e osserva che le dipendenze di test corrispondenti sono disponibili.

    Una cartella di origine parallela nel progetto core conterrà i test di unità ed eventuali file di test di supporto. Questa cartella test assicura la separazione delle classi di test dal codice sorgente, ma consente ai test di agire come se si trovassero negli stessi pacchetti del codice sorgente.

Creazione del test JUnit

I test di unità tipicamente sono mappati 1-a-1 con le classi Java™. In questo capitolo verrà scritto un test JUnit per BylineImpl.java, che è il modello Sling che supporta il componente Byline.

Cartella del test di unità src

Percorso in cui sono archiviati i test di unità.

  1. Crea un test di unità per BylineImpl.java creando una nuova classe Java™ in src/test/java in una struttura di cartelle di pacchetti Java™ che rispecchia la posizione della classe Java™ da testare.

    Creare un nuovo file BylineImplTest.java

    Poiché stiamo testando

    • src/main/java/com/adobe/aem/guides/wknd/core/models/impl/BylineImpl.java

    creare una classe Java™ per test di unità corrispondente in

    • src/test/java/com/adobe/aem/guides/wknd/core/models/impl/BylineImplTest.java

    Il suffisso Test nel file di test di unità BylineImplTest.java è una convenzione che consente di

    1. Identificarlo facilmente come file di test per BylineImpl.java
    2. Ma anche differenziare il file di test dalla classe in fase di test, BylineImpl.java

Revisione di BylineImplTest.java

A questo punto, il file di test JUnit è una classe Java™ vuota.

  1. Aggiorna il file con il seguente codice:

    package com.adobe.aem.guides.wknd.core.models.impl;
    
    import static org.junit.jupiter.api.Assertions.*;
    
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    
    public class BylineImplTest {
    
        @BeforeEach
        void setUp() throws Exception {
    
        }
    
        @Test
        void testGetName() {
            fail("Not yet implemented");
        }
    
        @Test
        void testGetOccupations() {
            fail("Not yet implemented");
        }
    
        @Test
        void testIsEmpty() {
            fail("Not yet implemented");
        }
    }
    
  2. Il primo metodo public void setUp() { .. } è annotato con @BeforeEach di JUnit, che indica a chi esegue il test JUnit di eseguire questo metodo prima di ogni metodo di test in questa classe. Ciò permette comodamente di inizializzare lo stato di test comune richiesto da tutti i test.

  3. I metodi successivi sono i metodi di test, i cui nomi sono preceduti da test per convenzione e contrassegnati con l’annotazione @Test. Per impostazione predefinita, tutti i nostri test sono impostati per non riuscire, poiché non li abbiamo ancora implementati.

    Innanzitutto, iniziamo con un singolo metodo di test per ogni metodo pubblico sulla classe che stiamo testando, quindi:

    BylineImpl.java
    BylineImplTest.java
    getName()
    è testato da
    testGetName()
    getOccupations()
    è testato da
    testGetOccupations()
    isEmpty()
    è testato da
    testIsEmpty()

    Questi metodi possono essere ampliati in base alle esigenze, come vedremo più avanti in questo capitolo.

    Quando viene eseguita questa classe di test JUnit (nota anche come caso di test JUnit), ogni metodo contrassegnato con @Test verrà eseguito come test che può essere superato o non superato.

BylineImplTest è stato generato

core/src/test/java/com/adobe/aem/guides/wknd/core/models/impl/BylineImplTest.java

  1. Eseguire il caso di test JUnit facendo clic con il pulsante destro del mouse sul file BylineImplTest.java e toccando Esegui.
    Come previsto, tutti i test hanno esito negativo poiché non sono ancora stati implementati.

    Esegui come test Junit

    Fai clic con il pulsante destro del mouse su BylineImplTests.java > Esegui