JUnit - Utilizzo dell'asserzione

Asserzione

Tutte le asserzioni sono nella classe Assert.

public class Assert extends java.lang.Object

Questa classe fornisce una serie di metodi di asserzione, utili per la scrittura di test. Vengono registrate solo le asserzioni non riuscite. Alcuni dei metodi importanti della classe Assert sono i seguenti:

Sr.No. Metodi e descrizione
1

void assertEquals(boolean expected, boolean actual)

Verifica che due primitive / oggetti siano uguali.

2

void assertTrue(boolean condition)

Verifica che una condizione sia vera.

3

void assertFalse(boolean condition)

Verifica che una condizione sia falsa.

4

void assertNotNull(Object object)

Verifica che un oggetto non sia nullo.

5

void assertNull(Object object)

Verifica che un oggetto sia nullo.

6

void assertSame(object1, object2)

Il metodo assertSame () verifica se due riferimenti a oggetti puntano allo stesso oggetto.

7

void assertNotSame(object1, object2)

Il metodo assertNotSame () verifica se due riferimenti a oggetti non puntano allo stesso oggetto.

8

void assertArrayEquals(expectedArray, resultArray);

Il metodo assertArrayEquals () verificherà se due array sono uguali tra loro.

Usiamo alcuni dei metodi sopra menzionati in un esempio. Crea un file di classe java denominatoTestAssertions.java in C: \> JUNIT_WORKSPACE.

import org.junit.Test;
import static org.junit.Assert.*;

public class TestAssertions {

   @Test
   public void testAssertions() {
      //test data
      String str1 = new String ("abc");
      String str2 = new String ("abc");
      String str3 = null;
      String str4 = "abc";
      String str5 = "abc";
		
      int val1 = 5;
      int val2 = 6;

      String[] expectedArray = {"one", "two", "three"};
      String[] resultArray =  {"one", "two", "three"};

      //Check that two objects are equal
      assertEquals(str1, str2);

      //Check that a condition is true
      assertTrue (val1 < val2);

      //Check that a condition is false
      assertFalse(val1 > val2);

      //Check that an object isn't null
      assertNotNull(str1);

      //Check that an object is null
      assertNull(str3);

      //Check if two object references point to the same object
      assertSame(str4,str5);

      //Check if two object references not point to the same object
      assertNotSame(str1,str3);

      //Check whether two arrays are equal to each other.
      assertArrayEquals(expectedArray, resultArray);
   }
}

Successivamente, crea un file di classe java denominato TestRunner.java in C: \> JUNIT_WORKSPACE per eseguire i casi di test.

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner2 {
   public static void main(String[] args) {
      Result result = JUnitCore.runClasses(TestAssertions.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilare le classi Test case e Test Runner utilizzando javac.

C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java

Ora esegui il Test Runner, che eseguirà il test case definito nella classe Test Case fornita.

C:\JUNIT_WORKSPACE>java TestRunner

Verifica l'output.

true

Annotazione

Le annotazioni sono come meta-tag che puoi aggiungere al tuo codice e applicarli ai metodi o in classe. Queste annotazioni in JUnit forniscono le seguenti informazioni sui metodi di test:

  • quali metodi verranno eseguiti prima e dopo i metodi di prova.
  • quali metodi vengono eseguiti prima e dopo tutti i metodi e.
  • quali metodi o classi verranno ignorati durante l'esecuzione.

La tabella seguente fornisce un elenco di annotazioni e il loro significato in JUnit -

Sr.No. Annotazione e descrizione
1

@Test

L'annotazione Test dice a JUnit che il metodo public void a cui è collegata può essere eseguito come test case.

2

@Before

Diversi test richiedono oggetti simili creati prima di poter essere eseguiti. L'annotazione di un metodo public void con @Before fa sì che tale metodo venga eseguito prima di ogni metodo di test.

3

@After

Se si allocano risorse esterne in un metodo Before, è necessario rilasciarle dopo l'esecuzione del test. L'annotazione di un metodo public void con @After fa sì che tale metodo venga eseguito dopo il metodo Test.

4

@BeforeClass

L'annotazione di un metodo void statico pubblico con @BeforeClass fa sì che venga eseguito una volta prima di uno qualsiasi dei metodi di test nella classe.

5

@AfterClass

Questo eseguirà il metodo al termine di tutti i test. Questo può essere utilizzato per eseguire attività di pulizia.

6

@Ignore

L'annotazione Ignora viene utilizzata per ignorare il test e tale test non verrà eseguito.

Crea un file di classe java denominato JunitAnnotation.java in C: \> JUNIT_WORKSPACE per testare l'annotazione.

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 JunitAnnotation {
	
   //execute before class
   @BeforeClass
   public static void beforeClass() {
      System.out.println("in before class");
   }

   //execute after class
   @AfterClass
   public static void  afterClass() {
      System.out.println("in after class");
   }

   //execute before test
   @Before
   public void before() {
      System.out.println("in before");
   }
	
   //execute after test
   @After
   public void after() {
      System.out.println("in after");
   }
	
   //test case
   @Test
   public void test() {
      System.out.println("in test");
   }
	
   //test case ignore and will not execute
   @Ignore
   public void ignoreTest() {
      System.out.println("in ignore test");
   }
}

Successivamente, crea un file di classe java denominato TestRunner.java in C: \> JUNIT_WORKSPACE per eseguire le annotazioni.

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(JunitAnnotation.class);
		
      for (Failure failure : result.getFailures()) {
         System.out.println(failure.toString());
      }
		
      System.out.println(result.wasSuccessful());
   }
}

Compilare le classi Test case e Test Runner utilizzando javac.

C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java

Ora esegui il Test Runner, che eseguirà il test case definito nella classe Test Case fornita.

C:\JUNIT_WORKSPACE>java TestRunner

Verifica l'output.

in before class
in before
in test
in after
in after class
true