JUnit Tutorial sulle annotazioni con esempio: cosa sono @Test e @After
Che cos'è la JUnit Annotazioni?
JUnit Annotazioni è una forma speciale di metadati sintattici a cui è possibile aggiungere Java codice sorgente per una migliore leggibilità e struttura del codice. Variabili, parametri, pacchetti, metodi e classi possono essere annotati. Le annotazioni sono state introdotte in Junit4, il che rende Java codice più leggibile e semplice. Questa è la grande differenza tra Junit3 e Junit4: Junit4 è basato sulle annotazioni.
Con la conoscenza delle annotazioni in Junit5, si può facilmente imparare e implementare un JUnit test. Di seguito è riportato l'importante e utilizzato di frequente JUnit elenco delle annotazioni:
S.No. | Annotazioni | Descrizione |
---|---|---|
1. | @Test | Questa annotazione sostituisce org.junit.TestCase che indica che il metodo public void a cui è collegato 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 di tutti i casi di test, ad esempio la connessione di test deve essere eseguita prima di tutti i casi di test. |
4. | @Dopo | Questa annotazione può essere utilizzata se si desidera eseguire alcune istruzioni dopo ciascuna Test Case ad esempio reimpostare variabili, eliminare 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 il rilascio delle risorse dopo l'esecuzione di tutti i casi di test. |
6. | @Ignora | Questa annotazione può essere utilizzata se si desidera ignorare alcune istruzioni durante l'esecuzione del test, ad esempio per disabilitare 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 con uno SLA (accordo sul livello di servizio) e i test devono essere completati entro un tempo specificato. |
8. | @Test(expected=IllegalArgumentException.class) | Questa annotazione può essere utilizzata se si desidera gestire un'eccezione durante l'esecuzione del test. Ad esempio, se si desidera verificare se un particolare metodo sta generando un'eccezione specificata o meno. |
JUnit Esempio di annotazioni
Creiamo una classe che copra importanti JUnit annotazioni con semplici istruzioni print ed eseguilo con una classe test runner:
Passo 1) Considera di seguito la classe Java con vari metodi allegati alle annotazioni sopra elencate:
Esempio di annotazioni Junit.java
package guru99.junit; import static org.junit.Assert.assertEquals; import static 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; public class JunitAnnotationsExample { private ArrayList<String> list; @BeforeClass public static void m1() { System.out.println("Using @BeforeClass , executed before all test cases "); } @Before public void m2() { list = new ArrayList<String>(); System.out.println("Using @Before annotations ,executed before each test cases "); } @AfterClass public static void m3() { System.out.println("Using @AfterClass ,executed after all test cases"); } @After public void m4() { list.clear(); System.out.println("Using @After ,executed after each test cases"); } @Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); } @Ignore public void m6() { System.out.println("Using @Ignore , this execution is ignored"); } @Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); } @Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); } }
Passo 2) creiamo una classe test runner per eseguire il test sopra:
TestRunner.java
package 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) { Result result = 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 di stampa potranno essere visualizzate su una console.
- Come discusso nella tabella sopra nell'annotazione @Before in JUnit, @BeforeClass [ metodo m1() e m2() ] verrà eseguito rispettivamente prima di ciascuno e prima di tutti i casi di test.
- Allo stesso modo @After in JUnit, @afterClass (metodo m3() e m4()) verrà eseguito rispettivamente dopo ciascuno e dopo tutti i casi di test. @ignore (metodo m6()) verrà trattato 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:
@Test public void m5() { list.add("test"); assertFalse(list.isEmpty()); assertEquals(1, list.size()); }
Nel metodo sopra mentre aggiungi una stringa nella variabile "list" così
- lista.èVuoto() restituirà falso.
- assertFalse(list.isEmpty()) deve restituire vero.
- Di conseguenza, il caso di prova lo farà passare.
Poiché hai aggiunto solo una stringa nell'elenco, la dimensione è una.
- lista.dimensione() deve restituire il valore int come “1” .
- So assertEquals(1, list.size()) deve restituire vero.
- Di conseguenza, il caso di prova lo farà passare.
- Considera il metodo m7() come indicato di seguito:
@Test(timeout = 10) public void m7() { System.out.println("Using @Test(timeout),it can be used to enforce timeout in JUnit4 test case"); }
Come discusso sopra @Test(timeout = 10)l'annotazione viene utilizzata per imporre il timeout nel test case.
- Considera il metodo m8() come indicato di seguito:
@Test(expected = NoSuchMethodException.class) public void m8() { System.out.println("Using @Test(expected) ,it will check for specified exception during its execution"); }
Come discusso sopra @Test(previsto) controllerà l'eccezione specificata durante la sua esecuzione, quindi il metodo m8() genererà "No Such Method Exception". Di conseguenza, il test verrà eseguito con un'eccezione.
Poiché tutti i casi di test vengono superati, ciò si traduce in un'esecuzione corretta del test.
Risultato attuale
Poiché nell'esempio precedente sono presenti tre casi di test, tutti i casi di test verranno eseguiti uno per uno. Vedi l'output di seguito:
Vedi sotto le istruzioni print che possono essere visualizzate sulla console:
Utilizzando @BeforeClass , eseguito prima di tutti i casi di test
Utilizzando le annotazioni @Before, eseguite prima di ogni caso di test
Utilizzando @After, eseguito dopo ogni caso di test
Utilizzando le annotazioni @Before, eseguite prima di ogni caso di test
Utilizzando @Test(timeout), può essere utilizzato per imporre il timeout JUnit4 casi di prova
Utilizzando @After, eseguito dopo ogni caso di test
Utilizzando le annotazioni @Before, eseguite prima di ogni caso di test
Utilizzando @Test(expected), controllerà l'eccezione specificata durante la sua esecuzione
Utilizzando @After, eseguito dopo ogni caso di test
Utilizzando @AfterClass, eseguito dopo tutti i casi di test
JUnit Asserisci classe
Questa classe fornisce una serie di metodi di asserzione utili per scrivere un caso di test. Se tutte le istruzioni assert vengono superate, i risultati del test hanno esito positivo. Se una qualsiasi istruzione assert fallisce, i risultati del test vengono falliti.
Come hai visto in precedenza, la tabella seguente descrive importanti metodi e descrizioni di Assert:
S.No. | Metodo | Descrizione |
---|---|---|
1. | void assertEquals(booleano previsto, booleano effettivo) | Controlla se due valori sono uguali al metodo uguale alla classe Object |
2. | void assertFalse(condizione booleana) | la funzionalità consiste nel verificare che una condizione sia falsa. |
3. | void assertNotNull(Oggetto oggetto) | La funzionalità "assertNotNull" consiste nel verificare che un oggetto non sia nullo. |
4. | void assertNull(Oggetto oggetto) | La funzionalità "assertNull" consiste nel verificare che un oggetto sia nullo. |
5. | void assertTrue(condizione booleana) | La funzionalità "assertTrue" serve a verificare che una condizione sia vera. |
6. | vuoto fallito() | Se vuoi generare un errore di asserzione, hai fail() che risulta sempre in un verdetto di fallimento. |
7. | void assertSame([Messaggio stringa] | La funzionalità "assertSame" consiste nel verificare che i due oggetti si riferiscano allo stesso oggetto. |
8. | void assertNotSame([Messaggio stringa] | La funzionalità "assertNotSame" consiste nel verificare che i due oggetti non si riferiscano allo stesso oggetto. |
JUnit Classe Casi di test
Per eseguire più test, è disponibile la classe TestCase in org.junit.TestCase Pacchetti. L'annotazione @Test dice 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 in org.junit.TestCase classe:
S.No. | Metodo | Descrizione |
---|---|---|
1. | int countTestCases() | Questo metodo viene utilizzato per contare il numero di casi di test eseguiti da esegui(RisultatoTesttr) metodo. |
2. | RisultatoTestcreaRisultato() | Questo metodo viene utilizzato per creare un file Risultato del test oggetto. |
3. | String getNome() | Questo metodo restituisce una stringa che non è altro che a Caso di prova. |
4. | Esegui risultato test() | Questo metodo viene utilizzato per eseguire un test che restituisce a Risultato del test oggetto |
5. | esecuzione nulla (risultato TestResult) | Questo metodo viene utilizzato per eseguire un test avente a Risultato del test oggetto che non restituisce nulla. |
6. | void setName(Nome stringa) | Questo metodo viene utilizzato per impostare un nome di a Caso di prova. |
7. | configurazione nulla() | Questo metodo viene utilizzato per scrivere il codice di associazione delle risorse. ad esempio, creare una connessione al database. |
8. | smontaggio vuoto() | Questo metodo viene utilizzato per scrivere il codice di rilascio delle risorse. Ad esempio, rilascia la connessione al database dopo aver eseguito l'operazione di transazione. |
JUnit Classe TestResult
Quando esegui un test, restituisce un risultato (sotto forma di Risultato del test oggetto). Questo oggetto TestResult può essere utilizzato per analizzare l'oggetto risultante. Il risultato del test può essere un fallimento o un successo.
Vedi la tabella seguente 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 rilevare l'errore durante l'esecuzione del test. |
5. | Enumerazione errori() | 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. | esecuzione nulla (test TestCase) | Questo metodo viene utilizzato per eseguire un caso di test. |
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 | vuoto stop() | Questo metodo viene utilizzato per testare la corsa da arrestare. |
JUnit Classe della suite di prova
Se si desidera eseguire più test in un ordine specifico, è possibile farlo combinando tutti i test in un unico posto. Questo posto è chiamato "test suite".
Vedere la tabella seguente per i metodi importanti utilizzati in org.junit.TestSuite classe:
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 provaClass) | 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 getNome() | Questo metodo viene utilizzato per ottenere il nome della suite di test. |
5. | esecuzione nulla (risultato TestResult) | Questo metodo viene utilizzato per eseguire un test e raccogliere i risultati del test Risultato del test oggetto. |
6. | void setName(Nome stringa) | Questo metodo viene utilizzato per impostare il nome di Suite di prova. |
7. | Prova testAt(int indice) | Questo metodo viene utilizzato se si desidera restituire il test in un determinato indice. |
8. | int testCount() | Questo metodo viene utilizzato se si desidera restituire un numero di test nella Suite. |
9. | Avviso test statico (messaggio String) | Questo metodo restituisce un test che fallirà e registrerà un messaggio di avviso. |
Sommario
- JUnit fornisce un'API portatile, che fornisce tutte le classi importanti e Selenium annotazioni utili per scrivere un test unitario.
- Classi molto utili durante la scrittura di un caso di test
- org.junit.Assert
- org.junit.TestCase
- org.junit.TestResult
- org.junit.TestSuite
- Importante e usato frequentemente JUnit elenco delle annotazioni@Prima@PrimaClass@Dopo
@Dopo la lezione
@Test
@Ignorare