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 |