Escolar Documentos
Profissional Documentos
Cultura Documentos
3 4
5 6
1
Un ejemplo sencillo Un ejemplo sencillo
String[] e3={"e", "d", "c", "b", "a"};
• Construyamos manualmente un objeto
expected y comparémoslo con el
Lista reves=new Lista(e3);
Lista derecha=reves.ordenar();
obtenido:
String[] e3={"e", "d", "c", "b", "a"};
superado if (derecha.equals(expected))
ResultadoCorrecto();
{"a", "b", "c", "d", "e"} else
ResultadoIncorrecto();
7 8
automática
– Nos permite construir “árboles de casos de prueba” this.assertEquals(expected, listaAlReves.ordenar());
(suites) }
9 10
String[] e3={"e", "d", "c", "b", "a"}; String[] e3={"e", "d", "c", "b", "a"};
listaAlReves=new Lista(e3); listaAlReves=new Lista(e3);
2
El framework JUnit (II) El framework JUnit (II)
• Destaquemos algunos elementos: • Destaquemos algunos elementos:
13 14
Mi código
17 18
3
Clases fundamentales
Clases fundamentales: Assert
19 20
} 21 22
El TestRunner El TestRunner
public void testOrdenarNula1() {
public void testOrdenarReves() {
Lista listaNula1=null;
String[] ex={"a", "b", "c", "d", "e"};
this.assertNull(listaNula1);
Lista expected=new Lista(ex);
}
String[] e3={"e", "d", "c", "b", "a"};
Lista listaAlReves=new Lista(e3); public void testOrdenarNula2() {
String[] e4=null;
Lista listaNula2=new Lista(e4);
this.assertEquals(expected,
listaAlReves.ordenar()); String[] ex=null;
} Lista expected=new Lista(ex);
this.assertEquals(expected,
listaNula2.ordenar());
public void testOrdenarTodosIguales() {
}
String[] e2={"a", "a", "a", "a", "a"};
Lista listaTodosIguales=new Lista(e2);
public void testOrdenarListaVacia() {
String[] e5={};
String[] ex={"a", "a", "a", "a", "a"};
Lista listaVacia=new Lista(e5);
Lista expected=new Lista(ex);
String[] ex={};
this.assertEquals(expected,
listaTodosIguales.ordenar()); Lista expected=new Lista(ex);
} this.assertEquals(expected,
listaVacia.ordenar());
}
23 24
4
El TestRunner El TestRunner
25 26
El TestRunner Términos
• Es importante notar que todos los • En muchos casos, public
los mismos objetos
String toString()
5
Términos: fixture Términos: TestSuite
31 32
33 34
35 36
6
Términos: TestSuite raiz Términos: TestSuite raiz
37 38
39 40
• Igual que es necesario comprobar cómo • Podemos desear que ordenar() dé un error
se comporta el programa en situaciones cuando la lista esté vacía:
idóneas, es también importante probarlo public Lista ordenar() throws Exception {
en situaciones en que se producen if (size()==0)
errores.
throw new Exception("No se puede ordenar una lista vacía");
ordenar(0, size()-1);
41 42
7
Pruebas de excepciones (fail) Pruebas de excepciones (fail)
public void testOrdenarNula2()
throws Exception { • Modificamos los dos métodos test
String[] ex=null; public void testOrdenarNula2() throws Exception {
Lista expected=new Lista(ex); try
{
this.assertEquals(expected,
String[] ex=null;
listaNula2.ordenar());
Lista expected=new Lista(ex);
}
this.assertEquals(expected, listaNula2.ordenar());
fail("Debería haberse lanzado una excepción");
public void testOrdenarListaVacia() }
throws Exception { catch (Exception e)
String[] ex={}; {
Lista expected=new Lista(ex); // Capturamos la excepción para que el caso no falle
this.assertEquals(expected, }
listaVacia.ordenar()); }
}
43 44
• Todas las clases Java son • Por tanto, en muchos casos tendremos
especializaciones de Object Llamado por los que redefinir equals(Object):boolean en la
assertEquals(...) clase que estamos probando
definidos en Assert
45 46
assertEquals(expected, obtained);
}
8
Ejemplo “equals” (y III) equals(Object): boolean
Si redefinimos Otros métodos assertX
en Cuenta de ese modo...
public void testIngresarYRetirarloTodo() throws Exception
{ • assertTrue(boolean)
Cuenta expected=new Cuenta("Pepe", "123");
public void testIngresar()
{
Cuenta obtained=new Cuenta("Macario", "123456"); Cuenta obtained=new Cuenta("Pepe", "123");
obtained.ingresar(1000.0); obtained.ingresar(100.0); obtained.ingresar(200.0);
obtained.retirar(1000.0); obtained.ingresar(300.0);
assertTrue(obtained.getSaldo()==600.0);
assertEquals(expected, obtained); }
• assertNull(Object)
}
assertEquals(cuenta1, cuenta2);
assertNotSame(cuenta1, cuenta2);
51 52
}
• http://www.junit.org
public abstract class TarjetaTester1 extends TestCase
{
public TarjetaTester1(String sTestName)
{
super(sTestName);
}
Tarjeta expected=prepararTarjetaEsperada();
assertEquals(expected, obtained);
} 53 54
}
9
Instalación de JUnit Instalación de JUnit
junit.jar es el
fichero que se
añade al classpath
55 56
try {
int temp_f=Integer.parseInt(str_f);
double temp_c=(temp_f-32)*5/9.0;
out.println("Fahrenheit: " + temp_f + ", Celsius: " + temp_c);
}
catch (NumberFormatException e) {
out.println("Invalid temperature: " + str_f);
}
57 } 58
}
public class TemperatureTester extends TestCase public class TemperatureTester extends TestCase
{ {
public TemperatureTester() public TemperatureTester()
{ {
} }
public void test_bad_parameter() throws Exception { public void test_bad_parameter() throws Exception {
temperature s = new temperature(); temperature s = new temperature();
MockHttpServletRequest request=new MockHttpServletRequest(); MockHttpServletRequest request=new MockHttpServletRequest();
MockHttpServletResponse response=new MockHttpServletResponse(); MockHttpServletResponse response=new MockHttpServletResponse();
request.setupAddParameter("Fahrenheit", "boo!"); request.setupAddParameter("Fahrenheit", "boo!");
response.setExpectedContentType("text/html"); response.setExpectedContentType("text/html");
s.doGet(request, response); s.doGet(request, response);
response.verify(); response.verify();
assertTrue(response.getOutputStreamContents().startsWith("Invalid assertTrue(response.getOutputStreamContents().startsWith("Invalid
temperature")); temperature"));
} }
...
59 } 60
Tomado y adaptado de: Thomas y Hunt (2002). Mock Objects. IEEE Software, nº de mayo/junio, pp. 22-24.
10
Objetos Mock Objetos Mock
• En el caso anterior, el
MockHttpServletRequest y el
MockHttpServletResponse son objetos
HttpServletRequest y
HttpServletResponse, ya que el servlet
que estamos probando trabaja con
objetos de estos tipos
61 62
63 64
65 66
11
Pruebas de programas Java
mediante JUnit
12