This page was exported from - JPinup Export date: Thu Jun 8 21:38:37 2017 / +0000 GMT JUnit - Test per calcolatrice E' utile ricordare che JUnit è un framework di testing unitario per Java. In questo articolo vediamo come predisporre una classe Java per i test su alcune operazioni matematiche previste per una calcolatrice. Nello specifico, vediamo come testare addizione, moltiplicazione e sottrazione, operazioni implementate in una classe Calcolatrice. Partiamo con l'avvio di Eclipse, creando un nuovo progetto Java. - Implementiamo una classe Calcolatrice con relativa interfaccia ICalculator package it.jpinup.interfaces; public interface ICalculator { public int add(int a,int b); public int mul(int a,int b); public int sub(int a,int b); } Calculator package it.jpinup.implementation; import it.jpinup.interfaces.ICalculator; public class Calculator implements ICalculator{ @Override public int add(int a, int b) { // TODO Auto-generated method stub return a+b; } @Override public int mul(int a, int b) { // TODO Auto-generated method stub return a*b; } @Override public int sub(int a, int b) { // TODO Auto-generated method stub return a-b; } } - Vediamo il TestCase Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com | Page 1/5 | This page was exported from - JPinup Export date: Thu Jun 8 21:38:37 2017 / +0000 GMT Per creare un Test Case di seguito i passaggi: File--> New --> Junit Test Case - Inserire il nome del TestCase, nel nostro caso CalculatorTest Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com | Page 2/5 | This page was exported from - JPinup Export date: Thu Jun 8 21:38:37 2017 / +0000 GMT - Aggiungere le librerie JUnit nel build path CalculatorTest Importante l'utilizzo di alcune annotation: RunWith: se una classe è annotato con @RunWith nel momento dell'esecuzione del test, JUnit invocherà la classe specificata nell'annotazione, invece di quella sua interna. La Classe specificata nell'annotation è utile per utilizzare un set di dati e parametri già definiti Parameter: i parametri utilizzati per i valori di test Parameters: il set di valori utili ai test L'ultimo test è stato inserito volutamente in modo errato, in modo che l'asserzione si aspetta una somma, mentre il metodo invocato è la sottrazione. package it.jpinup.test; import static org.junit.Assert.*; import it.jpinup.implementation.Calculator; import it.jpinup.interfaces.ICalculator; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class CalculatorTest { @Parameter public int m1; @Parameter(value = 1) Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com | Page 3/5 | This page was exported from - JPinup Export date: Thu Jun 8 21:38:37 2017 / +0000 GMT public int m2; // creates the test data @Parameters public static Collection<Object[]> data() { Object[][] data = new Object[][] { { 1, 2 }, { 5, 3 }, { 121, 4 } }; return Arrays.asList(data); } @Test public void add() { ICalculator calculatorTest = new Calculator(); assertEquals("Result", m1 + m2, calculatorTest.add(m1, m2)); } @Test public void mul() { ICalculator calculatorTest = new Calculator(); assertEquals("Result", m1 * m2, calculatorTest.mul(m1, m2)); } @Test public void sub() { ICalculator calculatorTest = new Calculator(); assertEquals("Result", m1 - m2, calculatorTest.sub(m1, m2)); } @Test public void subA() { ICalculator calculatorTest = new Calculator(); assertEquals("Result", m1 + m2, calculatorTest.sub(m1, m2)); } } - Implementare la classe per avviare i test package it.jpinup.test; import org.junit.runner.JUnitCore; Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com | Page 4/5 | This page was exported from - JPinup Export date: Thu Jun 8 21:38:37 2017 / +0000 GMT import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class MyTestRunner { public static void main(String[] args) { Result result = JUnitCore.runClasses(CalculatorTest.class); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } } } Avviando il main, il risultato, come ci si aspetta, è il fallimento dell'ultimo metodo: subA[0(it.jpinup.test.CalculatorTest): Result expected:<3> but was:<-1> subA[1(it.jpinup.test.CalculatorTest): Result expected:<8> but was:<2> subA[2(it.jpinup.test.CalculatorTest): Result expected:<125> but was:<117> Dalla prospettiva JUnit, confermiamo i risultati Output as PDF file has been powered by [ Universal Post Manager ] plugin from www.ProfProjects.com | Page 5/5 |