4.1 @Disabilitato
Ora diamo un'occhiata ad alcune annotazioni molto utili e popolari del framework JUnit. La prima annotazione consente di disattivare un test specifico in modo che JUnit non lo chiami. È necessario nei casi in cui si nota che il test non funziona correttamente o si modifica il codice e il test si interrompe accidentalmente.
Come ho scritto prima, il 99% dei test non è supportato da nessuno, quindi prima o poi si rivelano tutti disabilitati. Pertanto, questa annotazione è la prima nell'elenco di quelle utili.
Considera il suo esempio:
public class AppTest {
@Disabled("Test is temporarily disabled. True, true") @Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
Nell'esempio precedente, il metodo testOnDev()
non verrà chiamato. A proposito, l'annotazione @Disabled
può essere scritta immediatamente prima della dichiarazione di classe, quindi tutti i suoi metodi verranno ignorati.
@Disabled("Temporarily turned off the test, we will fix it by May 2001")
public class AppTest {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
4.2 @Nidificato
JUnit consente di chiamare metodi di test su classi nidificate. Intendo classi di test nidificate. Non è un dato di fatto che li incontrerai spesso, ma esiste una tale possibilità, quindi devi capire di cosa si tratta.
Per chiamare i metodi di una classe nidificata prima della sua dichiarazione, è necessario scrivere un'annotazione @Nested
. Esempio:
public class AppTest {
@Nested
public class DevStagingEnvironment {
@Test
void testOnDev(){
System.setProperty("ENV", "DEV");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
@Nested
public class ProductionEnvironment {
@Test
void testOnProd(){
System.setProperty("ENV", "PROD");
Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
}
}
}
Maggiori dettagli possono essere trovati nella documentazione ufficiale .
4.3 @ExtendWith
Un'altra annotazione utile è @ExtendWith
. Molto probabilmente la incontrerai molto spesso, quindi diamo un'occhiata a lei in modo più dettagliato.
JUnit è un potente framework che ti consente di scrivere vari plugin (estensioni) per una personalizzazione flessibile del tuo lavoro. Alcune estensioni possono raccogliere statistiche sui test, altre possono emulare un file system in memoria, altre possono emulare il lavoro all'interno di un server web e così via.
Se il tuo codice è in esecuzione all'interno di un framework (ad esempio, Spring), quasi sempre questo framework gestisce la creazione e la configurazione degli oggetti nel tuo codice . Pertanto, è indispensabile uno speciale plug-in di test. Esempi:
Esempio 1. L'estensione WebServerExtension
passa al metodo di test chiamato URL
per funzionare correttamente.
@Test @ExtendWith(WebServerExtension.class)
void getProductList(@WebServerUrl String serverUrl) {
WebClient webClient = new WebClient();
// Use WebClient to connect to web server using serverUrl and verify response
assertEquals(200, webClient.get(serverUrl + "/products").getResponseStatus());
}
Questo è il modo in cui i test di solito iniziano a testare il codice che funziona con il framework Spring:
@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
class TestServiceTest {
@MockBean
TestService service;
@Test
void test() {
assertNotNull(service); // Test succeeds
}
}
SpringExtension
crea una versione di prova del framework Spring, ma MockitoExtention
consente di creare oggetti falsi. Gli oggetti falsi sono un argomento molto interessante, lo toccheremo sicuramente, ma un po 'più tardi.
4.4 @Timeout
Concludiamo questa lezione con una piccola e interessante annotazione @Timeout
. Consente di impostare l'ora in cui eseguire il test. Se il test ha richiesto più tempo di quanto specificato nell'annotazione, viene considerato fallito.
class TimeoutDemo {
@Test @Timeout(value = 100, unit = TimeUnit.MILLISECONDS)
void failsIfExecutionTimeExceeds100Milliseconds() {
// test will fail if it takes more than 100 milliseconds
}
}
Questo conclude la nostra lezione.
GO TO FULL VERSION