lunes, 11 de abril de 2011

POO - Clase 9: Diseño de Pruebas Unitarias


En programación, una prueba unitaria es una forma de probar el correcto funcionamiento de un módulo de código. Esto sirve para asegurar que cada uno de los módulos funcione correctamente por separado.

Explicación:


Pruebas unitarias son las que se hacen a un sstema, pero separado en partes. Es decir hacer pruebas a cada sección de un programa que realiza una tarea diferente y única. Por ejemplo: Realizar una prueba para verificar el funcionamiento de una sola clase, o de un solo método, etc.

Las veo muy útiles para detectar errores en métodos, comprobando su funcionamiento con una prueba. Para el diseño de pruebas utilizare lo que es Junit, una librería que se puede descargar de aquí. Es totalmente gratuita y proporciona clases y métodos para facilitar la comparación de valores y otras cosas para realizar tus pruebas.

Ejemplo de Pruebas Unitarias:


Para el ejemplo creé mi clase Automovil, que hace las cosas básicas de un automóvil, acelerar, frenar, etc.
El código es el siguiente:

public class Automovil{
 private int velocidad = 0;
 private String modelo;
 private float gasolina = 100;

 public Automovil(String modelo){
  this.modelo = modelo;
 }

 public void aumentarVelocidad(int aumento){
  if(velocidad < 100){
  velocidad = velocidad + aumento;
  gasolina = gasolina - (aumento/2);
  }
 }
 public void disminuirVelocidad(int disminucion){
  if(velocidad > 10){
  velocidad = velocidad - disminucion;
  }
  else{
  velocidad = 0;
  }
 }

 public void frenadoTotal(){
  velocidad = 0;
 }

 public String getModelo(){
  return modelo;
 }
 public int getVelocidad(){
  return velocidad;
 }
 public float getGasolina(){
  return gasolina;
 }

}

Usando los métodos aumentarVelocidad(), disminuirVelocidad(), y frenadoTotal(), haremos pruebas de como cambian ciertos atributos del automóvil.
Por ejemplo;

  • Al aumentar la velocidad, la variable aumentar debe incrementarse una cierta cantidad, se hará una prueba para comprobarlo.
  • Al crear un objeto del tipo automóvil, se debe comprobar que usando el método devuelva el modelo del automóvil correcto.
  • Al aumentar la velocidad, se debe comprobar(solo para ejemplificar) que la "gasolina" disminuye una cierta cantidad.
  • Al "frenar" se debe comprobar que la velocidad se vuelve 0.
La clase de prueba es la siguiente:

import junit.framework.Test;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
public class Prueba extends TestCase{

 public static Test suite() {
  return new TestSuite(Prueba.class);
     }
 
 public void testVelocidad(){
  System.out.println("Comprobando la velocidad del auto...");
  Automovil bmw = new Automovil("BMW");
  bmw.aumentarVelocidad(10);
  super.assertEquals( 10, bmw.getVelocidad());
     }
 
     public void testModelo(){
  System.out.println("Comprobando el modelo del auto...");
  String cheyenne = "Cheyenne";
  Automovil chevrolet = new Automovil(cheyenne);
  super.assertTrue(cheyenne.equals(chevrolet.getModelo()));
 }
 
     public void testGasolina(){
  System.out.println("Comprobando la gasolina del auto...");
  Automovil nissan = new Automovil("Tsuru");
  nissan.aumentarVelocidad(15);
  super.assertTrue(nissan.getGasolina() < 100);
     }
 
 public static void main(String[]args){
  TestRunner.run(Prueba.suite());
 }
}
Ya con estos códigos, compile ambos, y corrí Prueba.java, y los resultados fueron los siguientes:


Fueron los resultados esperados ya que como se observa en los tests, las condiciones son las correctas.

Referencias:


No hay comentarios:

Publicar un comentario