miércoles, 4 de mayo de 2011

[TALLER] Implementación y aplicación de pruebas unitarias

En esta entrada explicare los pasos para realizar mi prueba.

Primero que nada quería decir que quería hacer esta prueba a modo de ejemplo, probando la funcionalidad del envió de notas a la base de datos, según yo si funcionaba, pero a la hora de ejecutar estos tests me doy cuenta que no funcionaba, afortunadamente lo solucione.

Para los test utilizare mi clase Notas:

package Organidatabase;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.SQLException;
import java.util.Scanner;

public class Notas extends Database{
 String nota;
 String para;
 
 InputStreamReader isr = new InputStreamReader(System.in);
 BufferedReader br = new BufferedReader (isr);
  
  public Notas () {
     }
  
  public String note() throws IOException{
    System.out.println("Escriba su nota: ");
        nota=br.readLine();
        nota = nota.replace(' ','_');
        System.out.println(nota);
        return nota;
  }
  
  public String to(){
   System.out.println("Para: ");
      Scanner a = new Scanner(System.in);
      para=a.next();
      return para;
  }

  public String get_all(String note, String to, String from){
  try{
   stmt = ct.prepareStatement("INSERT INTO notes (idAlumnos, note, idTo) VALUES (?,?,?)");
   stmt.setString(1,from);
   stmt.setString(2, note);
   stmt.setString(3, to);
   stmt.executeUpdate();
   stmt.close();
   String all = "Se envió exitosamente:\n"+note+"\nPara:\n"+to;
   return all;
  }catch(SQLException i){
   System.out.println("Ocurrio un error.");
   return null;
  }
 }
}


Explico brevemente, lo que hace es tomar dos strings, e insertarlos dentro de la base de datos, el string note() genera la nota y transforma los espacios en blanco en guiones, el string to() solo recibe una cadena de texto equivalente a la matricula de quien se envia. Por ultimo el método get_all() inserta dentro de la base de datos los strings y devuelve un objeto string para asegurar que se envio la nota.

En cuanto a mi test:

package Organidatabase;

import java.io.IOException;

import junit.framework.TestCase;

public class TestNotas extends TestCase {
 
 private String s;
 
  public TestNotas( String nombre ) {
    super( nombre );
  }

  public static void main( String args[] ) {
    junit.textui.TestRunner.run( TestNotas.class );
  }
  
  public void setUp() {
   Notas n = new Notas();
   try {
  s=n.get_all(n.note(), n.to(), "1441708");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
  }

  public void testEnviaNota() {
    assertNotNull(s);
  }


}


El test asegura el envío o marca el error al no poder enviarlo. En el setUp()
 se declara un objeto del tipo Notas, el string s recibe el valor de get_all().

En teoría todo está bien, una vez que s reciba el string dejara de ser null y el testEnviarNota() basicamente comprueba de que el string s no sea nulo.

Ok, pasare a ejecutar el test:

En la consola marcó un error.
JUnit marca una falla.

La falla se debe a que como el string s es precisamente un string, yo en el ejemplo puse a y b como entradas, y aunque teoricamente debería ser valido ya que dentro de un string  puede ir tansolo un caractér y a final de cuentas get_all() sevuelve un string completo donde a y b se juntan, hay una falla con el ImputStreamReader y el BufferReader, solo aceptan strings y lanzan una excepción del tipo IOexception, esto corta el programa y sucede el fallo.

Lo corro de nuevo, esta vez con parametros adecuados:

Y JUnit:





Parece que todo salió bien.

Ahora, el verdadero problema que tuve con mi clase fue, según yo, que mi base de datos no aceptaba una entrada de strings con espacios, tenía que cambiar el Scanner por el ImputStreamReader, o de lo contrario obtenía una linda excepción.

De esta manera, podia utilizar la función replace para cambiar los espacios por guiones y de la misma manera al recibir la nota hace el proceso contario.

JUnit me ayudó mas que nada a detectar dónde fallaba, de ahí me base para encontara el verdadero problema que generaba el fallo.

1 comentarios:

Publicar un comentario