Che cosa sono le annotazioni JUnit?
JUNIT ANNOTATIONS è una forma speciale di metadati sintattici che possono essere aggiunti al codice sorgente Java per una migliore leggibilità e struttura del codice. È possibile annotare variabili, parametri, pacchetti, metodi e classi. Le annotazioni sono state introdotte in Junit4, il che rende il codice Java più leggibile e semplice. Questa è la grande differenza tra Junit3 e Junit4 che Junit4 è basata sull'annotazione.
Con la conoscenza delle annotazioni in Junit5, si può facilmente apprendere e implementare un test JUnit. Di seguito è riportato l'elenco delle annotazioni importanti e utilizzate di frequente:
S.No. | Annotazioni | Descrizione |
---|---|---|
1. | @Test | Questa annotazione è una sostituzione di org.junit.TestCase che indica che il metodo public void a cui è allegata può essere eseguito come test Case. |
2. | @Prima | Questa annotazione viene utilizzata se si desidera eseguire alcune istruzioni come le precondizioni prima di ogni caso di test. |
3. | @Prima della lezione | Questa annotazione viene utilizzata se si desidera eseguire alcune istruzioni prima che tutti i casi di test, ad esempio, la connessione di prova debba essere eseguita prima di tutti i casi di test. |
4. | @Dopo | Questa annotazione può essere utilizzata se si desidera eseguire alcune istruzioni dopo ogni scenario di test, ad esempio il ripristino di variabili, l'eliminazione di file temporanei, variabili, ecc. |
5. | @Dopo la lezione | Questa annotazione può essere utilizzata se si desidera eseguire alcune istruzioni dopo tutti i casi di test, ad esempio per il rilascio delle risorse dopo l'esecuzione di tutti i casi di test. |
6. | @Ignores | Questa annotazione può essere utilizzata se si desidera ignorare alcune istruzioni durante l'esecuzione del test, ad esempio disabilitando alcuni casi di test durante l'esecuzione del test. |
7. | @Test (timeout = 500) | Questa annotazione può essere utilizzata se si desidera impostare un timeout durante l'esecuzione del test, ad esempio se si lavora in base a uno SLA (accordo sul livello di servizio) e i test devono essere completati entro un periodo di tempo specificato. |
8. | @Test (previsto = IllegalArgumentException.class) | Questa annotazione può essere utilizzata se si desidera gestire qualche eccezione durante l'esecuzione del test. Ad esempio, se si desidera verificare se un metodo particolare sta generando un'eccezione specificata o meno. |
In questo tutorial imparerai-
- Esempio di annotazioni JUnit
- JUnit Assert Class
- Classe di casi di test JUnit
- Classe JUnit TestResult
- Classe JUnit Test Suite
Esempio di annotazioni JUnit
Creiamo una classe che copre importanti annotazioni JUnit con semplici istruzioni print ed eseguiamola con una classe di test runner:
Passaggio 1) Considera la seguente classe java con vari metodi allegati alle annotazioni sopra elencate:
JunitAnnotationsExample.java
pacchetto guru99.junit;import statico org.junit.Assert.assertEquals;import statico org.junit.Assert.assertFalse;import java.util.ArrayList;import org.junit.After;import org.junit.AfterClass;import org.junit.Before;import org.junit.BeforeClass;import org.junit.Ignore;import org.junit.Test;classe pubblica JunitAnnotationsExample {elenco ArrayListprivato;@Prima della lezionepublic static void m1 () {System.out.println ("Utilizzo di @BeforeClass, eseguito prima di tutti i casi di test");}@Primapublic void m2 () {list = new ArrayList ();System.out.println ("Utilizzo delle annotazioni @Before, eseguito prima di ogni test case");}@Dopo la lezionepublic static void m3 () {System.out.println ("Utilizzo di @AfterClass, eseguito dopo tutti i casi di test");}@Dopopublic void m4 () {list.clear ();System.out.println ("Utilizzo di @After, eseguito dopo ogni test case");}@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}@Ignorarepublic void m6 () {System.out.println ("Utilizzando @Ignore, questa esecuzione viene ignorata");}@Test (timeout = 10)public void m7 () {System.out.println ("Utilizzando @Test (timeout), può essere utilizzato per applicare il timeout nel caso di test JUnit4");}@Test (previsto = NoSuchMethodException.class)public void m8 () {System.out.println ("Utilizzando @Test (previsto), controllerà l'eccezione specificata durante la sua esecuzione");}}
Passaggio 2) creiamo una classe di runner di test per eseguire il test sopra:
TestRunner.java
pacchetto guru99.junit;import org.junit.runner.JUnitCore;import org.junit.runner.Result;import org.junit.runner.notification.Failure;public class TestRunner {public static void main (String [] args) {Risultato risultato = JUnitCore.runClasses (JunitAnnotationsExample.class);for (Failure failure: result.getFailures ()) {System.out.println (failure.toString ());}System.out.println ("Result ==" + result.wasSuccessful ());}}
Risultato atteso
- Tutti i casi di test verranno eseguiti uno per uno e tutte le istruzioni print possono essere visualizzate su una console.
- Come discusso nella tabella precedente @Before, @BeforeClass [i metodi m1 () e m2 ()] verranno eseguiti rispettivamente prima di ciascuno e prima di tutti i casi di test.
- Allo stesso modo @ after, @ afterClass (metodo m3 () e m4 ()) verranno eseguiti rispettivamente dopo ogni e dopo tutti i casi di test. @ignore (metodo m6 ()) verrà considerato come se ignorasse il test.
Analizziamo in dettaglio i casi di test utilizzati nella classe java sopra:
- Considera il metodo m5 () come indicato di seguito:
@Testpublic void m5 () {list.add ("test");assertFalse (list.isEmpty ());assertEquals (1, list.size ());}
Nel metodo sopra come stai aggiungendo una stringa nella variabile "list" così
- list.isEmpty () restituirà false.
- assertFalse (list.isEmpty ()) deve restituire true.
- Di conseguenza, il test case passerà .
Poiché hai aggiunto solo una stringa nell'elenco, la dimensione è una.
- list.size () deve restituire il valore int come "1".
- Quindi assertEquals (1, list.size ()) deve restituire true.
- Di conseguenza, il test case passerà .
- Considera il metodo m7 () come indicato di seguito:
@Test (timeout = 10)public void m7 () {System.out.println ("Utilizzando @Test (timeout), può essere utilizzato per applicare il timeout nel caso di test JUnit4");}
Come discusso in precedenza, l' annotazione @Test (timeout = 10) viene utilizzata per applicare il timeout nel caso di test.
- Considera il metodo m8 () come indicato di seguito:
@Test (previsto = NoSuchMethodException.class)public void m8 () {System.out.println ("Utilizzando @Test (previsto), controllerà l'eccezione specificata durante la sua esecuzione");}
Come discusso in precedenza, @Test (previsto) verificherà l'eccezione specificata durante la sua esecuzione, quindi il metodo m8 () genererà "Nessuna eccezione di tale metodo". Di conseguenza, il test verrà eseguito con un'eccezione.
Quando tutti i casi di test vengono superati, si ottiene un'esecuzione del test riuscita.
Risultato attuale
Poiché ci sono tre casi di test nell'esempio precedente, tutti i casi di test verranno eseguiti uno per uno. Vedere l'output di seguito :
Vedi sotto le dichiarazioni di stampa che possono essere viste su console:
Utilizzando @BeforeClass, eseguito prima di tutti i casi di test
Utilizzando le annotazioni @Before, eseguite prima di ogni test case
Utilizzando @After, eseguito dopo ogni test case
Utilizzando le annotazioni @Before, eseguite prima di ogni test case
Utilizzando @Test (timeout), può essere utilizzato per applicare il timeout nel caso di test JUnit4
Utilizzando @After, eseguito dopo ogni test case
Utilizzando le annotazioni @Before, eseguite prima di ogni test case
Utilizzando @Test (previsto), verificherà l'eccezione specificata durante la sua esecuzione
Utilizzando @After, eseguito dopo ogni test case
Utilizzando @AfterClass, eseguito dopo tutti i casi di test
JUnit Assert Class
Questa classe fornisce una serie di metodi di asserzione utili per scrivere un caso di test. Se tutte le istruzioni di asserzione vengono superate, i risultati del test sono positivi. Se un'istruzione assert fallisce, i risultati del test non sono riusciti.
Come hai visto in precedenza, la tabella sottostante descrive importanti metodi e descrizioni di Assert:
S.No. | Metodo | Descrizione |
---|---|---|
1. | void assertEquals (booleano atteso, booleano effettivo) | Controlla se due valori sono uguali in modo simile al metodo equals della classe Object |
2. | void assertFalse (condizione booleana) | la funzionalità consiste nel verificare che una condizione sia falsa. |
3. | void assertNotNull (oggetto Object) | La funzionalità "assertNotNull" consiste nel verificare che un oggetto non sia nullo. |
4. | void assertNull (Object oggetto) | La funzionalità "assertNull" consiste nel verificare che un oggetto sia nullo. |
5. | void assertTrue (condizione booleana) | La funzionalità "assertTrue" serve per verificare che una condizione sia vera. |
6. | void fail () | Se vuoi lanciare un errore di asserzione, hai fail () che si traduce sempre in un verdetto di fallimento. |
7. | void assertSame ([String message] | La funzionalità "assertSame" consiste nel verificare che i due oggetti si riferiscano allo stesso oggetto. |
8. | void assertNotSame ([String message] | La funzionalità "assertNotSame" consiste nel verificare che i due oggetti non facciano riferimento allo stesso oggetto. |
Classe di casi di test JUnit
Per eseguire più test, la classe TestCase è disponibile nei pacchetti org.junit.TestCase . Annotation @Test dice a JUnit che questo metodo public void (Test Case qui) a cui è allegato può essere eseguito come test case.
La tabella seguente mostra alcuni metodi importanti disponibili nella classe org.junit.TestCase :
S.No. | Metodo | Descrizione |
---|---|---|
1. | int countTestCases () | Questo metodo viene utilizzato per contare il numero di casi di test eseguiti dal metodo run (TestResult tr) . |
2. | TestResult createResult () | Questo metodo viene utilizzato per creare un oggetto TestResult . |
3. | String getName () | Questo metodo restituisce una stringa che non è altro che un TestCase . |
4. | TestResult run () | Questo metodo viene utilizzato per eseguire un test che restituisce un oggetto TestResult |
5. | void run (risultato TestResult) | Questo metodo viene utilizzato per eseguire un test con un oggetto TestResult che non restituisce nulla. |
6. | void setName (nome stringa) | Questo metodo viene utilizzato per impostare un nome di un TestCase. |
7. | void setUp () | Questo metodo viene utilizzato per scrivere il codice di associazione delle risorse. ad esempio, creare una connessione al database. |
8. | void tearDown () | Questo metodo viene utilizzato per scrivere il codice di rilascio della risorsa. es. Rilasciare la connessione al database dopo aver eseguito l'operazione di transazione. |
Classe JUnit TestResult
Quando si esegue un test, restituisce un risultato (sotto forma di oggetto TestResult ). Questo oggetto TestResult può essere utilizzato per analizzare l'oggetto risultante. Questo risultato del test può essere fallito o riuscito. Vedere la tabella sottostante per i metodi importanti utilizzati nella classe org.junit.TestResult:S.No. | Metodo | Descrizione |
---|---|---|
1. | void addError (Test test, Throwable t) | Questo metodo viene utilizzato se è necessario aggiungere un errore al test. |
2. | void addFailure (Test test, AssertionFailedError t) | Questo metodo viene utilizzato se è necessario aggiungere un errore all'elenco degli errori. |
3. | void endTest (test di prova) | Questo metodo viene utilizzato per notificare che un test è stato eseguito (completato) |
4. | int errorCount () | Questo metodo viene utilizzato per ottenere l'errore rilevato durante l'esecuzione del test. |
5. | Errori di enumerazione | Questo metodo restituisce semplicemente una raccolta (enumerazione qui) di errori. |
6. | int failureCount () | Questo metodo viene utilizzato per ottenere il conteggio degli errori rilevati durante l'esecuzione del test. |
7. | void run (TestCase test) | Questo metodo viene utilizzato per eseguire un test case. |
8. | int runCount () | Questo metodo conta semplicemente il test eseguito. |
9. | void startTest (test di prova) | Questo metodo viene utilizzato per notificare l'avvio di un test. |
10. | void stop () | Questo metodo viene utilizzato per testare l'esecuzione da arrestare. |
Classe JUnit Test Suite
Se desideri eseguire più test in un ordine specificato, puoi farlo combinando tutti i test in un unico punto. Questo posto è chiamato come le suite di test.
Vedere la tabella sottostante per i metodi importanti utilizzati nella classe org.junit.TestSuite :
S.No. | Metodo | Descrizione |
---|---|---|
1. | void addTest (test di prova) | Questo metodo viene utilizzato se si desidera aggiungere un test alla suite. |
2. | void addTestSuite (Class extends TestCase> testClass) | Questo metodo viene utilizzato se si desidera specificare la classe durante l'aggiunta di un test alla suite. |
3. | int countTestCases () | Questo metodo viene utilizzato se si desidera contare il numero di casi di test. |
4. | String getName () | Questo metodo viene utilizzato per ottenere il nome della suite di test. |
5. | void run (risultato TestResult) | Questo metodo viene utilizzato per eseguire un test e raccogliere il risultato del test nell'oggetto TestResult . |
6. | void setName (nome stringa) | Questo metodo viene utilizzato per impostare il nome di TestSuite . |
7. | Test testAt (int index) | Questo metodo viene utilizzato se si desidera restituire il test a un determinato indice. |
8. | int testCount () | Questo metodo viene utilizzato se si desidera restituire una serie di test nella Suite. |
9. | Avviso di test statico (messaggio di stringa) | Questo metodo restituisce un test che fallirà e registrerà un messaggio di avviso. |
Sommario:
- JUnit fornisce un'API portatile, che fornisce tutte le classi e le annotazioni importanti utili nella scrittura di uno unit test.
- Classi che sono molto utili durante la scrittura di un test case
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- elenco di annotazioni importanti e utilizzate di frequente
@Prima
@Prima della lezione
@Dopo
@Dopo la lezione
@Test
@Ignorare