You are on page 1of 16

EJEMPLO DE PRUEBAS UNITARIAS Y DE INTEGRACIÓN.

Escuela Superior de Informática (UCLM) Ingeniería Técnica en Informática de Sistemas. Ingeniería del Software.

1

Vector mFacturas.println("Factura " + (i+1)). i<mFacturas.println("Facturas del cliente " + mNombre + ":"). } } } Factura. for (int i=0. System.Vector. String nombre) { mNIF=nif. mNombre=nombre. .java: import java. public class Cliente { String mNIF.println("-------------------\n\n").addElement(f).out. } public void add(Factura f) { mFacturas.util. public class Factura implements Euro { Macario Polo Usaola Escuela Superior de Informática (UCLM) 2 Ingeniería Técnica en Informática de Sistemas.java: import java.show(). mFacturas=new Vector(). ((Factura) mFacturas.size(). public Cliente(String nif.out. Ingeniería del Software.Vector. } public void show() { System. mNombre.out.elementAt(i)).Se desean realizar las pruebas unitarias y de integración de las 3 clases cuyo código se ofrece a continuación: Cliente. i++) { System.util.

} public void quitar(int i) { mLineas[i]. public Factura(String n.mArticulo=null. System.out.println("\t } } " + (total/kCambio) + " euros").show(). String f) { mNumero=n.out. ."). mLineas[i]=l. " + mFecha). Linea mLineas[]. mLineas[i]. mFecha=f. Ingeniería del Software.out.mPrecio. i++) { mLineas[i]. System. mLineas[i]!=null. mFecha. Macario Polo Usaola Escuela Superior de Informática (UCLM) 3 Ingeniería Técnica en Informática de Sistemas. } public void add(Linea l) { int i=0. for (int i=0.. mLineas[i]!=null. i++) .println("\tTotal .String mNumero.. } public void show() { double total=0. total+=mLineas[i].mPrecio=0. mLineas=new Linea[10].println(mNumero + ". " + total + " pts.. for (i=0. } System.

Linea. } } Euro.... public Linea(String a..java: public class Linea { String mArticulo. Ingeniería del Software. double mPrecio. . } public void show() { System.386. " + mPrecio + " pts").out. } Macario Polo Usaola Escuela Superior de Informática (UCLM) 4 Ingeniería Técnica en Informática de Sistemas. mPrecio=p.println("\t" + mArticulo + " . double p) { mArticulo=a.java: interface Euro { final double kCambio = 166.

Cliente mNIF mNombre Cliente add show t t t o o mFacturas t Factura Factura add quitar show o o t t o mNumero t mFecha mLineas t t Línea Linea show o o mArticulo t mPrecio t Macario Polo Usaola Escuela Superior de Informática (UCLM) 5 Ingeniería Técnica en Informática de Sistemas. Ingeniería del Software. .MATRICES DE USO DE MIEMBROS DE DATOS.

read().1 Corte de mNIF: El único método que hay en este corte es el constructor. que ejecuta el caso de prueba en el que mNIF=null. } } • Caso de prueba 111 : El resultado de la ejecución del fragmento de código anterior. System. null). System. de manera que muestre el valor de mNIF.out. . Ingeniería del Software.PRUEBAS UNITARIAS 1. Para comprobar el funcionamiento de este constructor podemos hacer dos cosas: a) Añadir un método getNIF() para ver que devueleva mNIF b) Construir una clase con permiso para acceder a los atributos de Cliente. Pruebas unitarias de Cliente: 1.in.println("NIF: " + c. null). ß Nótese que el valor del 2º parámetro no me importa. al que se le da valor en el primer parámetro del constructor. ya que estoy en el corte correspondiente a mNIF. es el de la siguiente figura: • Caso de prueba 112 : Otra prueba puede ser la siguiente: Cliente c=new Cliente(new String(). Si optamos por la 2ª opción. dicha clase podría ser la siguiente: public class Principal { public static void main(String args[]) throws Exception { Cliente c=new Cliente(null. Macario Polo Usaola Escuela Superior de Informática (UCLM) 6 Ingeniería Técnica en Informática de Sistemas.mNIF).

new String()). String) show() Como en show() se utiliza el atributo mFacturas. Casos de prueba: • 121: Cliente c=new Cliente(null. que es de un tipo no básico.show(). . c. • 123: Cliente c=new Cliente(“5.2. c. null).show() • 122: Cliente c=new Cliente(new String().999J”. Corte de mNombre: Cliente(String. “Paco Pil”).655. c.1. Macario Polo Usaola Escuela Superior de Informática (UCLM) 7 Ingeniería Técnica en Informática de Sistemas.show(). Ingeniería del Software. lo obviamos en este tipo de pruebas.

f.1. 2. f. • Caso de prueba 211 . y que además no ha sido probado. Ingeniería del Software. null). Macario Polo Usaola Escuela Superior de Informática (UCLM) 8 Ingeniería Técnica en Informática de Sistemas. String) y show().1 Corte de mNumero. Puesto que éste es un atributo que representa un objeto agregado.show(). f. null). . null).show().show(). Factura f=new Factura(“1/2001”. • Caso de prueba 213 . Influyen aquí Factura(String. Factura f=new Factura(null. Corte de mFacturas. • Caso de prueba 212 .3. Pruebas unitarias de Factura. no probamos este corte. y que además no es de un tipo básico. Factura f=new Factura(new String(). 2.

Macario Polo Usaola Escuela Superior de Informática (UCLM) . Linea l=new Linea(“Agua fresca”. 0).) y no ha sido probado. 3. Corte de mFecha. • Caseo de prueba 313 .show(). Linea l=new Linea(null. 2. 3. 3. Pruebas de unitarias de Linea. l. 9 Ingeniería Técnica en Informática de Sistemas.1. Como este atributo representa una colección de objetos agregados. float.show(). Linea l=new Linea(new String(). Corte de mArticulo • Caso de prueba 311 . Ingeniería del Software. Corte de mLineas.2.show(). no realizamos pruebas de unidad para este corte. • Caso de prueba 321 . Los casos de prueba del corte de mNumero pueden probarse para este corte con resultados satisfactorios. Corte de mPrecio.3. que no son de un tipo básico (int. l.. 0). l. 0)..2. • Caso de prueba 312 .2.

por tanto. en el que esperamos el valor 0 y obtenemos el valor 0. null).show(). Podemos suponer que el cliente nos ha pedido como único requisito que no haya errores en tiempo de ejecución. null. Linea l=new Linea(“Agua fresca”. Macario Polo Usaola Escuela Superior de Informática (UCLM) 10 Ingeniería Técnica en Informática de Sistemas.Sirve el caso de prueba 311. Conclusiones sobre los resultados de las pruebas unitarias: No se ha realizado interpretación de los resultados de las pruebas porque carecemos de requisitos funcionales y no sabemos. l. Ingeniería del Software. • Caso de prueba 322. etc. . cómo debe comportarse este sistema ante los valores 0. con lo que todos los casos de prueba han resultado satisfactorios.

1. . En nuestro sencillo ejemplo. tener métodos get() y set(--) para todos los atributos de Linea. lo cual está prohibido. Pruebas de integración de Factura con Linea. Ingeniería del Software. show Linea mArticulo mPrecio X X X X Factura add quitar show X X X X mNumero mFecha X En la matriz anterior notamos cosas raras que impiden seguir ejecutando las pruebas de integración: los métodos Factura(String. en lo que influye mucho el grado de interdependencia. Hemos añadido los métodos siguientes: Macario Polo Usaola Escuela Superior de Informática (UCLM) 11 Ingeniería Técnica en Informática de Sistemas. parece claro que debemos comenzar probando la integración de Factura con Linea. Deberíamos. Los añadimos y volvemos a realizar pruebas de unidad en Linea. por tanto. String) y quitar(int) acceden a mLineas directamente a los atributos de la clase Linea. debemos tener en cuenta el nivel de complejidad de cada integración.PRUEBAS DE INTEGRACIÓN A la hora de realizar estas pruebas.

Ingeniería del Software. Con la matriz de ahora. . } public void setPrecio(double p) { mPrecio=p. Siguiendo los pasos que vimos en clase.1. determinamos los casos de prueba. que. mArticulo mPrecio X X X X X X X show Linea X X X Factura add quitar show X X X X mNumero mFecha X X X getPrecio setArtic.public void setArticulo(String a) { mArticulo=a. } public String getArticulo() { return mArticulo. en principio. Igual que con las pruebas de unidad. 2. probamos corte a corte. Corte de mNumero. setArtic. sí que podemos continuar las pruebas de integración de Factura con Linea. serán los mismos que al realizar las pruebas de unidad de la clase Factura. tras dibujar la “matriz 3D”. } public double getPrecio() { return mPrecio. } Funcionan perfectamente. ejecutamos estos casos de prueba: Macario Polo Usaola Escuela Superior de Informática (UCLM) 12 Ingeniería Técnica en Informática de Sistemas. En las pruebas de unidad. getPrecio setPrecio getArtic. con lo cual volvemos a las pruebas de integración.

0). Para continuar. añadiendo objetos de clase Linea mediante el método add(Linea): • Caso de prueba I-211-1.add(l). Caso de prueba I-211-3 . Factura f=new Factura(null. • Caso de prueba I-211-2 . Linea l2=new Linea(null. f. f.show(). Macario Polo Usaola Escuela Superior de Informática (UCLM) 13 Ingeniería Técnica en Informática de Sistemas. f. debemos dar valores de prueba al atributo mLineas. Factura f=new Factura(null. Linea l=new Linea(null. f. null).show(). null). Linea l2=new Linea(“Coca cola”. • null). String) llama a setArticulo(double) show() llama a show() y a setPrecio(double) Podríamos volver a ejecutar los casos de prueba 211 a 213. f. null). null).211: Factura f=new Factura(null. 0). Sin embargo. Linea l=new Linea(null. 213: Factura f=new Factura(“1/2001”. Ingeniería del Software. 212: Factura f=new Factura(new String().001). 1000). Factura f=new Factura(null. miramos qué métodos de Linea son llamados desde los métodos de Factura que pertenecen a este corte: • • Factura(String.show(). 0. 0). null).show(). f. Los tres casos consisten en una llamada al constructor de Factura y una llamada a su método show().add(l). Linea l=new Linea(null. f.add(l2). .show(). f.

add(l2). 50).f. 50). try { for (int i=0. f.} Macario Polo Usaola Escuela Superior de Informática (UCLM) 14 Ingeniería Técnica en Informática de Sistemas. new Linea("Leche". 25). new Linea("Gel". . 85). 240). f. new Linea("Gel 2". new Linea("Mistol". i<lineas. } catch (Exception e) {System. new Linea("Tomates 2". 195). new Linea("Mistol 2". new Linea("Leche 2". 85).out. new Linea("Tomates". 240). new Linea("Pan 2". new Linea("Agua 2".add(l). i++) f.show(). new Linea("Pan". 70). Linea lineas[]={ new Linea("Agua".show(). • Caso de prueba I-211-4. 195). f.add(lineas[i]). null). Factura f=new Factura(null.length. 70) }. 25).println(e). Ingeniería del Software.

Ingeniería del Software. mFecha. mLineas[i]. for (int i=0. } public void quitar(int i) { mLineas[i].setArticulo(null). } public void add(Linea l) { int i=0..getPrecio(). mLineas[i]=l. mLineas[i]!=null.util. public Factura(String n. public class Factura implements Euro { String mNumero.show()."). } public void show() { double total=0. for (i=0.Vector.setPrecio(0).out. " + mFecha). Linea mLineas[].APÉNDICE. mFecha=f. String f) { mNumero=n. i++) . System. i++) { mLineas[i]. " + total + " pts. .. mLineas[i]!=null.println(mNumero + ". mLineas=new Linea[10]. } System. a) Código de Factura tras añadir métodos set y get a Linea: import java. Macario Polo Usaola Escuela Superior de Informática (UCLM) 15 Ingeniería Técnica en Informática de Sistemas.. total+=mLineas[i].println("\tTotal .out.

out.. mPrecio=p. } public void setPrecio(double p) { mPrecio=p.println("\t } } " + (total/kCambio) + " euros").out. " + mPrecio + " pts"). } public void setArticulo(String a) { mArticulo=a.. private double mPrecio.. . public class Linea { private String mArticulo. double p) { mArticulo=a. public Linea(String a. Ingeniería del Software. } } Macario Polo Usaola Escuela Superior de Informática (UCLM) 16 Ingeniería Técnica en Informática de Sistemas.. b) Código de Linea tras añadirle métodos set y get. } public void show() { System. } public String getArticulo() { return mArticulo. } public double getPrecio() { return mPrecio.System.println("\t" + mArticulo + " .