JUnit
JUnit
JUnit
con JUnit 4
Temario
Tipos de Tests
Introduccin a JUnit
Test Class
Test Methods
Condiciones de aceptacin Assert
Fixture Methods
Test Suites
Tests de Timeout
Tests de manejo de excepciones
Test Runners
Tests Parametrizados
AssertThat y Hamcrest
Buenas Prcticas
Tipos de validacin
Tipos de Tests
(1/3)
Tests
Tests
Tests
Tests
Unitarios.
de Integracin.
de Sistema.
de Integracin de Sistemas.
Pruebas Funcionales
Tests Funcionales.
Tests de Aceptacin.
Tests de Regresin (cambios en cdigo funcionan).
Alpha testing.
Beta testing.
...
Tipos de Tests
Pruebas No-funcionales
Tests
Tests
Tests
Tests
Tests
...
de Rendimiento
de Resistencia, Carga, Stress
de Seguridad
de Usabilidad
de Mantenibilidad
(2/3)
Tipos de Tests
(3/3)
Tests
Unitarios
Tests de
Aceptacin
Tests
Funcionales
Tests de Sistema
Tests de
Integracin
Tests Unitarios
(1/3)
Tests Unitarios
(2/3)
Ventajas:
1. Fomentan el cambio.
2. Simplifica la integracin.
3. Documentan el cdigo.
4. Separacin de la interfaz y la implementacin.
5. Los errores quedan ms acotados y son ms
fciles de localizar.
Tests Unitarios
(3/3)
Introduccin a JUnit
(1/3)
C (CUnit)
C++ (CPPUnit)
Fortran (fUnit)
Delphi (DUnit)
Javascript (JSUnit)
Objective-C (OCUnit)
PHP (PHPUnit)
...
Introduccin a JUnit
JUnit proporciona:
(2/3)
Introduccin a JUnit
Los conceptos bsicos de JUnit son:
Test class
Test method
Assert
Fixture method
Test suite
Test runner
(3/3)
Test Class
Una Test Class es una clase java que contendr un conjunto
de Test Methods.
Por ejemplo, para probar los mtodos de una clase
Calculadora creamos la clase CalculadoraTest.
import org.junit.Test;
public class CalculadoraTest {
@Test
public void testXXX() {
...
}
}
Test Methods
(1/2)
Test Methods
(2/2)
assertSame("message", A, B)
assertTrue("message", A)
assertNotNull("message", A)
Fixture Methods
Las clases de tests tienen que programarse eficientemente
y refactorizarse cuando sea necesario.
JUnit nos proporciona anotaciones para definir mtodos
adicionales pre/post test. Mediante los que podemos
inicializar o finalizar elementos comunes, evitar
duplicidades, preparar datos, etc.
@BeforeClass
@Before
@After
@AfterClass
Tests de Timeout
Podemos realizar sencillos test de rendimiento verificando
que un test no exceda un tiempo lmite de ejecucin.
Para ello utilizamos el parmetro timeout.
@Test(timeout=100)
public void testProcessTimeout() {
...
}
Ignorar un Test
JUnit proporciona una anotacin para indicar que un
determinado test no queremos que se ejecute.
@Ignore(value="Mensaje")
@Test
public void testXXX() {
...
}
Tests Runners
JUnit permite definir cmo se han de ejecutar nuestros
tests, mediante el uso de diferentes Tests Runners.
org.junit.runners.JUnit4
org.junit.runners.Parameterized
org.junit.runners.Suite
org.springframework.test.
context.junit4.
SpringJUnit4ClassRunner
Tests Parametrizados
(1/2)
@Parameters
public static Collection<Integer[]> gestTestParameters(){
Tests Parametrizados
(2/2)
AssertThat y Hamcrest
(1/2)
AssertThat y Hamcrest
Matches Hamcrest mas comunes:
anything
is
allOf
anyOf
not
instanceOf, isCompatibleType
sameInstance
notNullValue, nullValue
hasProperty
hasEntry, hasKey, hasValue
hasItem, hasItems
closeTo, greaterThan,
lessThan containsString,
endsWith, startWith
...
(2/2)
Buenas Prcticas
Tipos de validacin
Validacin excepciones
@Test ( expected=IllegalArgumentException.class )
Validacin rendimiento
@Test ( timeout=100 )
Validacin interaccin
Utilizaremos Dobles (Mocks, Stubs, etc)
Caso de ejemplo
(1/5)
Caso de ejemplo
Creamos la clase que contendr las pruebas.
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculadoraImpuestosImplTest {
@Test
public void test() {
fail("Not yet implemented");
}
(2/5)
Caso de ejemplo
(3/5)
1 Regla de negocio:
Vehculos con menos de 70CV impuesto 9%
Primer test:
@Test
public void testUsoImpuestoEcologicoParaCvMenor70() {
CalculadoraImpuestosImpl calculadora = new CalculadoraImpuestosImpl();
double valorVehiculo = 10000;
int cv = 65;
double impuestoEsperado = 900;
double impuestoCalculado = calculadora.calculaImpuestoMatriculacion(valorVehiculo, cv);
assertEquals("Impuesto para vehiculos de menos de 70 CV debera ser del 9%",
impuestoEsperado, impuestoCalculado, 0);
}
Caso de ejemplo
(4/5)
2 Regla de negocio:
Un vehculo no puede tener 0CV
Segundo test:
@Test(expected=IllegalArgumentException.class)
public void test0CvGetIllegalArgumentException() {
CalculadoraImpuestosImpl calculadora = new CalculadoraImpuestosImpl();
calculadora.calculaImpuestoMatriculacion(100.0, 0);
}
Caso de ejemplo
(5/5)
@Before
public void inicializa() {
calculadora = new CalculadoraImpuestosImpl();
}
@After
public void finaliza() {
calculadora = null;
}
@Test
public void testUsoImpuestoEcologicoParaCvMenor70() {
double valorVehiculo = 10000;
int cv = 65;
double impuestoEsperado = 900;
double impuestoCalculado = calculadora.calculaImpuestoMatriculacion(valorVehiculo, cv);
assertEquals("Impuesto para vehiculos de menos de 70 CV debera ser del 9%," impuestoEsperado,
impuestoCalculado, 0);