0% encontró este documento útil (0 votos)
290 vistas12 páginas

Tutorial JUnit

El documento presenta una guía sobre el uso del framework JUnit para realizar pruebas automatizadas en programas Java. Se explican conceptos fundamentales como la creación de casos de prueba, el uso de objetos mock, y la organización de pruebas en suites. Además, se incluyen ejemplos prácticos de cómo implementar y ejecutar pruebas utilizando JUnit.

Cargado por

a562399
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
290 vistas12 páginas

Tutorial JUnit

El documento presenta una guía sobre el uso del framework JUnit para realizar pruebas automatizadas en programas Java. Se explican conceptos fundamentales como la creación de casos de prueba, el uso de objetos mock, y la organización de pruebas en suites. Además, se incluyen ejemplos prácticos de cómo implementar y ejecutar pruebas utilizando JUnit.

Cargado por

a562399
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Contenidos

Pruebas de programas Java • El framework JUnit (I)


mediante JUnit • Un ejemplo sencillo
• El framework JUnit (II)
Macario Polo Usaola • El TestRunner
Grupo Alarcos • Términos
Escuela Superior De Informática • Instalación de JUnit
Universidad De Castilla-la Mancha
• Objetos Mock
http://www.inf-cr.uclm.es/www/mpolo
1 2

El framework JUnit El framework JUnit

• JUnit es un “framework” para automatizar • Consta de un conjunto de clases que el


las pruebas de programas Java programador puede utilizar para construir
• Escrito por Erich Gamma y Kent Beck sus casos de prueba y ejecutarlos
• Open Source, disponible en automáticamente
http://www.junit.org • Los casos de prueba son realmente
• Adecuado para el Desarrollo dirigido por programas Java. Quedan archivados y
las pruebas (Test-driven development) pueden ser reejecutados tantas veces
como sea necesario

3 4

Un ejemplo sencillo Un ejemplo sencillo


package dominio;
import java.util.Vector;
? Representa una lista •Un posible caso de prueba es
ordenable de forma el siguiente:
public class Lista extends Vector { creciente. String[] e3={"e", "d", "c", "b", "a"};
public Lista() { ... }
Se ordena llamando al Lista reves=new Lista(e3);
Lista derecha=reves.ordenar();
public Lista(String[] elementos) {...}
método público
public Lista ordenar() {...} ordenar(), que llama
a su vez a ordenar(0, ...y el resultado esperado:
protected void ordenar(int iz, int de) {
... size()-1)
"a", "b", "c", "d", "e"
}
}

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"};

• Si derecha es igual al resultado esperado,


Lista reves=new Lista(e3);
Lista derecha=reves.ordenar();
entonces el caso de prueba ha sido Lista expected={"a", "b", "c", "d", "e"};

superado if (derecha.equals(expected))
ResultadoCorrecto();
{"a", "b", "c", "d", "e"} else
ResultadoIncorrecto();

7 8

El framework JUnit (II) El framework JUnit (II)


• El ejemplo anterior (obtained frente a expected) • Para el ejemplo anterior:
es una idea fundamental de JUnit public void testOrdenarReves() {
String[] ex={"a", "b", "c", "d", "e"};
• Ocurre que: Lista expected=new Lista(ex);
– JUnit nos va a permitir mantener de forma separada
los casos de prueba String[] e3={"e", "d", "c", "b", "a"};
Construcción manual del objeto esperado
– JUnit permite ejecutarlos (y reejecutarlos) de forma listaAlReves=new Lista(e3);

automática
– Nos permite construir “árboles de casos de prueba” this.assertEquals(expected, listaAlReves.ordenar());
(suites) }

9 10

El framework JUnit (II) El framework JUnit (II)

• Para el ejemplo anterior: • Para el ejemplo anterior:


public void testOrdenarReves() { public void testOrdenarReves() {
String[] ex={"a", "b", "c", "d", "e"}; String[] ex={"a", "b", "c", "d", "e"};
Lista expected=new Lista(ex); Lista expected=new Lista(ex);

String[] e3={"e", "d", "c", "b", "a"}; String[] e3={"e", "d", "c", "b", "a"};
listaAlReves=new Lista(e3); listaAlReves=new Lista(e3);

Construcción manual del objeto obtenido haciendo uso de


this.assertEquals(expected,
los métodos de la clase quelistaAlReves.ordenar());
estamos probando this.assertEquals(expected, listaAlReves.ordenar());
} }

Comparación de ambos objetos haciendo uso de las


funcionalidades suministradas por JUnit
11 12

2
El framework JUnit (II) El framework JUnit (II)
• Destaquemos algunos elementos: • Destaquemos algunos elementos:

public void testOrdenarReves() { public void testOrdenarReves() {


String[] ex={"a", "b", "c", "d", "e"}; String[] ex={"a", "b", "c", "d", "e"};
Lista expected=new Lista(ex); Lista expected=new Lista(ex);

String[] e3={"e", "d", "c", "b", "a"}; String[] e3={"e",Estamos probando


"d", "c", la clase
"b", "a"}; Lista
listaAlReves=new Lista(e3); listaAlReves=new Lista(e3);

this.assertEquals(expected, listaAlReves.ordenar()); this.assertEquals(expected, listaAlReves.ordenar());


} }

13 14

El framework JUnit (II) El framework JUnit (II)


• Destaquemos Estamos
algunos elementos:
probando la clase Lista • ¿Dónde está el código anterior?
• Lista(String[])
• Lista() • En una clase ListaTester, creada ex
public void testOrdenarReves() {
• ordenar()
String[] ex={"a", "b", "c", "d", "e"}; profeso para realizar las pruebas de Lista
• ordenar(int, int)
• ListaTester especializa a la clase TestCase
Lista expected=new Lista(ex);

String[] e3={"e", "d", "c", "b", "a"};


listaAlReves=new Lista(e3);
definida en JUnit
• En TestCase está definido el método
this.assertEquals(expected, listaAlReves.ordenar()); assertEquals antes mencionado, y muchos
}
otros más
No tiene método “assertEquals(...)”
15 16

Clases fundamentales Clases fundamentales


junit.framework junit.framework

Mi código
17 18

3
Clases fundamentales
Clases fundamentales: Assert

Ahí es donde utilizamos


el método assertEquals
que mencionamos antes

19 20

El framework JUnit El TestRunner


public class ListaTester1 extends TestCase
{
public class ListaTester1 extends TestCase
public ListaTester1(String sTestName)
{ {
public ListaTester1(String sTestName) super(sTestName);
{ }
super(sTestName);
} public void testOrdenarReves() {
String[] ex={"a", "b", "c", "d", "e"};
Lista expected=new Lista(ex);
public void testOrdenarReves() {
String[] ex={"a", "b", "c", "d", "e"}; String[] e3={"e", "d", "c", "b", "a"};
Lista expected=new Lista(ex); Lista listaAlReves=new Lista(e3);

String[] e3={"e", "d", "c", "b", "a"}; this.assertEquals(expected,


Lista listaAlReves=new Lista(e3); listaAlReves.ordenar());
}
this.assertEquals(expected, listaAlReves.ordenar());
}
}

} 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

Una vez que la clase


Lista ha sido
corregida...

25 26

El TestRunner Términos
• Es importante notar que todos los • En muchos casos, public
los mismos objetos
String toString()

métodos test que vamos implementando


{
pueden ser utilizados String
para s="";
múltiples
se quedan guardados en ListaTester pruebas
for (int i=0; i<size(); i++)
s+=" " + elementAt(i);
• Si añadimos, borramos o modificamos el • Supongamos que añadimos
return s;
a Lista un
código de Lista, los casos de prueba
}

habidos en ListaTester siguen disponibles método toString():String


y pueden volver a ser ejecutados
• Se aconseja reejecutarlos cada vez que se • También nos interesará probar el
modifique el código toString() con la lista nula, la lista vacía,
etc.
27 28

Términos Términos: fixture


public void testOrdenarReves() {
String[] ex={"a", "b", "c", "d", "e"};
• En casos como el anterior creamos fixtures
Lista expected=new Lista(ex); (˜ elementos fijos)
• Son variables de instancia de la clase de Test
String[] e3={"e", "d", "c", "b", "a"};
Lista listaAlReves=new Lista(e3);
this.assertEquals(expected, listaAlReves.ordenar()); • Se les asigna valor en el método setUp(),
}
heredado de TestCase
public void testToStringListaAlReves() {
String expected="a b c d e";
• Se liberan en tearDown()
String[] e3={"e", "d", "c", "b", "a"}; • setUp y tearDown se ejecutan antes y después
Lista listaAlReves=new Lista(e3);
listaAlReves.ordenar();
de cada el TestRunner llame a cada método test
this.assertEquals(expected, listaAlReves.ordenar());
}
29 30

5
Términos: fixture Términos: TestSuite

• En otras ocasiones será bueno agrupar


public void setUp() {
String[] e1={"a", "a", "a", "a", "a"};
listaTodosIguales=new Lista(e1); casos de prueba: por ejemplo, tener un
String[] e2={"a", "b", "c", "d", "e"};
listaOrdenada=new Lista(e2);
grupo de pruebas en el que ponemos las
String[] e3={"e", "d", "c", "b", "a"}; pruebas realizadas a listas vacías y nulas
listaAlReves=new Lista(e3);
listaNula1=null;
String[] e4=null;
listaNula2=new Lista(e4);
String[] e5={};
listaVacia=new Lista(e5);
}

31 32

Términos: TestSuite Términos: TestSuite raiz

public static TestSuite suite() { public static TestSuite suite() {


TestSuite raiz=new TestSuite("raíz"); TestSuite raiz=new TestSuite("raíz");
TestSuite suite1=new TestSuite("Iguales"); TestSuite suite1=new TestSuite("Iguales");
suite1.addTest(new ListaTester1("testOrdenarTodosIguales")); suite1.addTest(new ListaTester1("testOrdenarTodosIguales"));
TestSuite suite2=new TestSuite("Al revés"); TestSuite suite2=new TestSuite("Al revés");
suite2.addTest(new ListaTester1("testOrdenarReves")); suite2.addTest(new ListaTester1("testOrdenarReves"));
TestSuite suite3=new TestSuite("Nulas o vacías"); TestSuite suite3=new TestSuite("Nulas o vacías");
suite3.addTest(new ListaTester1("testOrdenarNula1")); suite3.addTest(new ListaTester1("testOrdenarNula1"));
suite3.addTest(new ListaTester1("testOrdenarNula2")); suite3.addTest(new ListaTester1("testOrdenarNula2"));
suite3.addTest(new ListaTester1("testOrdenarListaVacia")); suite3.addTest(new ListaTester1("testOrdenarListaVacia"));
raiz.addTest(suite1); raiz.addTest(suite1);
raiz.addTest(suite2); raiz.addTest(suite2);
raiz.addTest(suite3); raiz.addTest(suite3);
return raiz; return raiz;
} }

33 34

Términos: TestSuite raiz Términos: TestSuite raiz

public static TestSuite suite() { public static TestSuite suite() {


TestSuite raiz=new TestSuite("raíz"); suite1 TestSuite raiz=new TestSuite("raíz"); suite1
TestSuite suite1=new TestSuite("Iguales"); TestSuite suite1=new TestSuite("Iguales");
suite1.addTest(new ListaTester1("testOrdenarTodosIguales")); suite1.addTest(new ListaTester1("testOrdenarTodosIguales"));
TestSuite suite2=new TestSuite("Al revés"); TestSuite suite2=new TestSuite("Al revés");
suite2.addTest(new ListaTester1("testOrdenarReves")); testOrdenarTodosIguales
suite2.addTest(new ListaTester1("testOrdenarReves"));
TestSuite suite3=new TestSuite("Nulas o vacías"); TestSuite suite3=new TestSuite("Nulas o vacías");
suite3.addTest(new ListaTester1("testOrdenarNula1")); suite3.addTest(new ListaTester1("testOrdenarNula1"));
suite3.addTest(new ListaTester1("testOrdenarNula2")); suite3.addTest(new ListaTester1("testOrdenarNula2"));
suite3.addTest(new ListaTester1("testOrdenarListaVacia")); suite3.addTest(new ListaTester1("testOrdenarListaVacia"));
raiz.addTest(suite1); raiz.addTest(suite1);
raiz.addTest(suite2); raiz.addTest(suite2);
raiz.addTest(suite3); raiz.addTest(suite3);
return raiz; return raiz;
} }

35 36

6
Términos: TestSuite raiz Términos: TestSuite raiz

public static TestSuite suite() { public static TestSuite suite() {


TestSuite raiz=new TestSuite("raíz"); suite1 suite2 TestSuite raiz=new TestSuite("raíz"); suite1 suite2
TestSuite suite1=new TestSuite("Iguales"); TestSuite suite1=new TestSuite("Iguales");
suite1.addTest(new ListaTester1("testOrdenarTodosIguales")); suite1.addTest(new ListaTester1("testOrdenarTodosIguales"));
TestSuite suite2=new TestSuite("Al revés"); TestSuite suite2=new TestSuite("Al revés");
suite2.addTest(new ListaTester1("testOrdenarReves")); suite2.addTest(new ListaTester1("testOrdenarReves"));
TestSuite suite3=new TestSuite("Nulas o vacías"); TestSuite suite3=new TestSuite("Nulas o vacías");
suite3.addTest(new ListaTester1("testOrdenarNula1")); suite3.addTest(new ListaTester1("testOrdenarNula1"));
suite3.addTest(new ListaTester1("testOrdenarNula2")); suite3.addTest(new ListaTester1("testOrdenarNula2"));
suite3.addTest(new ListaTester1("testOrdenarListaVacia")); suite3.addTest(new ListaTester1("testOrdenarListaVacia"));
raiz.addTest(suite1); raiz.addTest(suite1);
raiz.addTest(suite2); raiz.addTest(suite2);
raiz.addTest(suite3); raiz.addTest(suite3);
return raiz; return raiz;
} }

37 38

Términos: TestSuite Términos: TestSuite


public static TestSuite suite() {
TestSuite raiz=new TestSuite("raíz");
TestSuite suite1=new TestSuite("Iguales");
suite1.addTest(new ListaTester1("testOrdenarTodosIguales"));
TestSuite suite2=new TestSuite("Al revés");
suite2.addTest(new ListaTester1("testOrdenarReves"));
TestSuite suite3=new TestSuite("Nulas o vacías");
suite3.addTest(new ListaTester1("testOrdenarNula1"));
suite3.addTest(new ListaTester1("testOrdenarNula2"));
suite3.addTest(new ListaTester1("testOrdenarListaVacia"));
raiz.addTest(suite1); raiz
raiz.addTest(suite2);
raiz.addTest(suite3);
return raiz; suite1 suite2 suite3
}

39 40

Pruebas de excepciones (fail) Pruebas de excepciones (fail)

• 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);

• Es decir, que a veces el comportamiento


return this;
}

correcto de nuestro programa consisten


en se produzca un error

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

Redefinición del método equals Redefinición del método equals

• 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

Ejemplo “equals” (I) Ejemplo “equals” (II)


public void testIngresarYRetirarloTodo() throws Exception
{
Cuenta expected=new Cuenta("Pepe", "123");

Cuenta obtained=new Cuenta("Macario", "123456");


obtained.ingresar(1000.0);
obtained.retirar(1000.0);

assertEquals(expected, obtained);
}

¿Cuándo son dos cuentas son iguales?


a) Los saldos son los mismos
b) Tienen el mismo nº de
movimientos
c) Opción b y todos son iguales
47 48
d) ...

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)
}

public void testNull()


{
public boolean equals(Object o){ Cuenta c=null;
if (!Cuenta.class.isInstance(o)) assertNull(c);
}
return false;
Cuenta c=(Cuenta) o;
return getSaldo()==c.getSaldo());
} 49 50

Otros métodos assertX Clases de prueba abstractas


• assertSame(Object, • Se pueden posponer las pruebas hasta
Object)/assertNotSame(Object, Object)
public void testDiferentesReferencias() throws que se tengan especializaciones concretas
Exception
{
de la clase abstracta
Cuenta cuenta1=new Cuenta("Macario", "123456");
cuenta1.ingresar(1000.0);
• Pero también puede construirse una clase
cuenta1.retirar(1000.0); de Test abstracta
Cuenta cuenta2=new Cuenta("Macario", "123456");
cuenta2.ingresar(1000.0);
cuenta2.retirar(1000.0);

assertEquals(cuenta1, cuenta2);
assertNotSame(cuenta1, cuenta2);
51 52
}

Clases de prueba abstractas Instalación de JUnit

• http://www.junit.org
public abstract class TarjetaTester1 extends TestCase
{
public TarjetaTester1(String sTestName)
{
super(sTestName);
}

public abstract Tarjeta getTarjeta();


public abstract Tarjeta prepararTarjetaEsperada();

public void testRetirar()


{
Tarjeta obtained=getTarjeta();
obtained.retirar(100.0);

Tarjeta expected=prepararTarjetaEsperada();
assertEquals(expected, obtained);
} 53 54
}

9
Instalación de JUnit Instalación de JUnit

• Algunos IDEs ya ofrecen integración


directa con JUnit

junit.jar es el
fichero que se
añade al classpath

55 56

Objetos Mock: ejemplo


Objetos Mock (˜ falsos) public class temperature extends HttpServlet
{
private static final String CONTENT_TYPE = "text/html";

• Basados en JUnit public void init(ServletConfig config) throws ServletException {


super.init(config);

• Sustituyen a clases complejas, }

dispositivos, etc. public void doGet(HttpServletRequest request, HttpServletResponse


response) throws ServletException, IOException
{
• Ejemplos: servlets, páginas jsp, bases de response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
datos... String str_f=request.getParameter("Fahrenheit");

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
}

Objetos Mock: ejemplo Objetos Mock: ejemplo


import com.mockobjects.servlet.*; import com.mockobjects.servlet.*;
import junit.framework.Test; import junit.framework.Test;
import junit.framework.TestCase; import junit.framework.TestCase;
import junit.framework.TestSuite; import junit.framework.TestSuite;

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

Objetos Mock Objetos Mock


• De forma general, todos los objetos Mock
...
request.setupAddParameter("Fahrenheit", "boo!"); comparten la misma estructura:
response.setExpectedContentType("text/html");
s.doGet(request, response);
– Especializan a la clase que se usa realmente
Operaciones response.verify(); (implementan por tanto todas sus posibles
específicas para ... operaciones abstractas)
probar – Contienen un conjunto de operaciones adicionales
addExpected... o setupExpected..., que van
indicando al objeto el estado en que quedará tras
ejecutar la operación de “dominio”
– Pueden implementar la interfaz Verifiable (método
verify())

63 64

Objetos Mock Conclusiones

• Difíciles de usar (poca documentación) • Marco de pruebas semiautomático


• Automatiza las pruebas de regresión
• Descargas y más información en • Los casos de prueba documentan el
www.mockobjects.com propio código fuente
• Adecuado para Desarrollo dirigido por las
pruebas
• Extensible (p.ej.: Mock), abierto, gratuito

65 66

11
Pruebas de programas Java
mediante JUnit

Macario Polo Usaola


Grupo Alarcos
Escuela Superior De Informática
Universidad De Castilla-la Mancha
http://www.inf-cr.uclm.es/www/mpolo
67

12

También podría gustarte