martes, 14 de diciembre de 2010

Actividad de la Onceava Semana

Pruebas Unitarias

Son pruebas individuales de un método o clase.

El procedimiento de elaboración de estas consiste en:

  • Antes de implementar una determinada funcionalidad, piensa cómo deberías probarla para verificar que se comporta correctamente. Esto permite desarrollar la funcionalidad teniendo las ideas muy claras de lo que debería hacer.
  • Escribe el código que implementa la funcionalidad deseada.
  • Escribe el código de las pruebas inmediatamente después.
  • Ejecuta las pruebas que hiciste.
  • Corrige la unidad de código que implementa la funcionalidad deseada hasta que pase todas y cada una de las pruebas.
  • Al añadir una nueva funcionalidad, repite el ciclo: piensa en cómo probarla, codifica la funcionalidad, codifica las pruebas, ejecuta todas las pruebas que hiciste (nuevas y viejas). No sigas hasta que el código pase absolutamente todas las pruebas.
  • Así una y otra vez para cada nueva funcionalidad que implementes


 

Se han implementado dos clases del proyecto consultoriomédico, las cuales son paciente y medicina, cada una de las cuatro clases tiene 4 métodos, alta, consulta, actualiza y baja. Estas clases tienen una conexión con una base de datos local MySQL y escriben directamente sobre ella.


 

Dado que ambas clases son similares solo pondré el código de una y la de pruebas, de todos modos las clases el código completo junto con los requerimientos se puede descargar de :


 

http://www.4shared.com/file/ULKfcnXj/codigo_pruebas_unitarias.html


 


 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;


 


 

public
class paciente {

    

    protected
int
idPaciente;

    protected String nombre = "";

    protected String apPaterno = "";

    protected String apMaterno ="";

    protected String fechaNacimiento = "";

    protected
int
edad;

    protected String sexo = "";

    protected
int
telefono;

    protected String calle ="";

    protected String colonia = "";

    protected String municipio = "";

    protected String ciudad ="";

    protected
int
cp;

    protected
int
noRegSoc;

    protected String resultado;

    

    public paciente(){

    }

    //Se crea el método de la Alta del paciente

    public
boolean AltaPaciente(int idPaciente, String nombre, String apPaterno,String apMaterno,String fechaNacimiento,

            int edad,String sexo, int telefono, String calle, String colonia, String municipio,

            String ciudad,int cp,int noRegSoc){

        //Se verifica que no haya valores nulos

        if(nombre.length()==0 || nombre==null){

            return
false;

        }else
if(apPaterno.length()==0 || apPaterno==null) {

            return
false;

        }else
if(fechaNacimiento.length()==0 || fechaNacimiento==null) {

            return
false;

        }else
if(sexo.length()==0 || sexo==null) {

            return
false;

        }else{

            try

     {

     /Se intenta hacer el insert del alta

DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

     Connection conexion = DriverManager.getConnection (

     "jdbc:mysql://localhost/consultorio","root", "root");

     Statement s = conexion.createStatement();

     String q="INSERT INTO PACIENTE VALUES("+idPaciente+",\"" +nombre+"\",\"" +apPaterno+"\",\"" +apMaterno+"\",\"" +fechaNacimiento+"\","+edad+",\"" +sexo+"\","+telefono+",\"" +calle+"\",\"" +colonia+"\",\"" +ciudad+"\",\"" +municipio+"\","+cp+","+noRegSoc+"); ";

    
 

     try{

         s.executeUpdate(q);

         System.out.println("Registro Insertado Correctamente");

     }catch(SQLException e) {

         System.out.println(e);

         return
false;

     };

     conexion.close();

     }

     //Excepcion del insert

catch (Exception e)

     {

     e.printStackTrace();

     return
false;

     }

     return
true;

        }

    }

    // Se crea el método de la Baja

    public
boolean BajaPaciente(int idPaciente){

    // Se intenta hacer la baja en la base de datos    

try

{


 

DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

Connection conexion = DriverManager.getConnection (


"jdbc:mysql://localhost/consultorio","root", "root");

Statement s = conexion.createStatement();

String q="DELETE FROM paciente WHERE idPaciente="+idPaciente+";";


 


try{

    s.executeUpdate(q);

    System.out.println("Registro Borrado Correctamente");

}catch(SQLException e) {

    System.out.println(e);

    return
false;

};


 

conexion.close();

}


// Excepción de la baja


catch (Exception e)

{

e.printStackTrace();


return
false;

}


return
true;

    }

    

    // Se crea el método de la consulta

public
boolean ConsultaPaciente(int idPaciente){

    // Se
intenta hacer la consulta a la BD
    


try

{


 

DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

Connection conexion = DriverManager.getConnection (


"jdbc:mysql://localhost/consultorio","root", "root");

Statement s = conexion.createStatement();

ResultSet rs = s.executeQuery ("select * from paciente where idPaciente="+idPaciente+";");


 


while (rs.next())

{

System.out.println (rs.getInt (1)+rs.getString(2)+rs.getString(3)+rs.getString(4));

}


// Se
cierra
la
conexión
con
la base de
datos.

conexion.close();

}


catch (Exception e)

{

e.printStackTrace();


return
false;

}


return
true;

    }

    

public
boolean ActualizaPaciente(int idPaciente, String nombre, String apPaterno,String apMaterno,String fechaNacimiento,

            int edad,String sexo, int telefono, String calle, String colonia, String municipio,

            String ciudad,int cp,int noRegSoc){

        if(nombre.length()==0 || nombre==null){

            return
false;

        }else
if(apPaterno.length()==0 || apPaterno==null) {

            return
false;

        }else
if(fechaNacimiento.length()==0 || fechaNacimiento==null) {

            return
false;

        }else
if(sexo.length()==0 || sexo==null) {

            return
false;

        }else{

            try

     {

    
 

     DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

     Connection conexion = DriverManager.getConnection (

     "jdbc:mysql://localhost/consultorio","root", "root");

     Statement s = conexion.createStatement();

     String q="UPDATE PACIENTE SET nombre=\"" +nombre+"\",apPaterno=\"" +apPaterno+"\",apMaterno=\"" +apMaterno+"\",fechaNacimiento=\"" +fechaNacimiento+"\",edad="+edad+",sexo=\"" +sexo+"\",telefono="+telefono+",calle=\"" +calle+"\",colonia=\"" +colonia+"\",ciudad=\"" +ciudad+"\",municipio=\"" +municipio+"\",cp="+cp+",NoRegSocial="+noRegSoc+" where idPaciente="+idPaciente+";";

    

     try{

         s.executeUpdate(q);

         System.out.println("Registro Actualizado Correctamente");

     }catch(SQLException e) {

         System.out.println(e);

         return
false;

     };

     // Se
cierra
la
conexión
con
la base de
datos.

     conexion.close();

     }

     catch (Exception e)

     {

     e.printStackTrace();

     return
false;

     }

     return
true;

        }

    }

}


 


 

Clase de Pruebas JUNIT:


 

import junit.framework.*;

public
class Test extends TestCase {

    public Test(){    

    }

    public
void testPaciente(){

//Aqui probamos con la instrucción AssertTrue los métodos de las clases. Los métodos nos regresan un valor binario, true si es correcto, false en caso contrario.

paciente paciente =new paciente();

        assertTrue(paciente.AltaPaciente(2, "Pedro", "Gonzalez", "Garcia", "1980-1-01", 30, "H", 83847563, "Calle 123", "De las calles", "Callejero", "Callejero", 34567, 8945688));

        assertTrue(paciente.ConsultaPaciente(2));

        assertTrue(paciente.ActualizaPaciente(2, "Pedro", "Villarreal", "Garcia", "1940-1-01", 30, "H", 83847563, "Calle 123", "De las calles", "Callejero", "Callejero", 34567, 8945688));

        assertTrue(paciente.BajaPaciente(2));

    }

    public
void testPacienteValoresNulos(){

        //Como no podemos insertar valores nulos utilizamos el AssertFalse para que nos marque correcto cuando no haga las instrucciones

paciente paciente =new paciente();

        assertFalse(paciente.AltaPaciente(3, "", "", "Garcia", "1980-1-01", 30, "H", 83847563, "Calle 123", "De las calles", "Callejero", "Callejero", 34567, 8945688));

        assertFalse(paciente.ActualizaPaciente(3, "", "", "Garcia", "1940-1-01", 30, "H", 83847563, "Calle 123", "De las calles", "Callejero", "Callejero", 34567, 8945688));

    }

    public
void testPacienteValoresNulosPermitidos(){

        paciente paciente =new paciente();

        assertTrue(paciente.AltaPaciente(4, "Pedro", "Gonzalez", "", "1980-1-01", 30, "H", 83847563, "Calle 123", "De las calles", "Callejero", "Callejero", 34567, 8945688));

        assertTrue(paciente.ActualizaPaciente(4, "Pedro", "Villarreal", "", "1940-1-01", 30, "H", 83847563, "", "De las calles", "Callejero", "Callejero", 34567, 8945688));

    }

    public
void testMedicina(){

        medicina medicina =new medicina();

        assertTrue(medicina.AltaMedicina(2,"NAPROXENO","PHARMA","NAPROXENO","NAPROXENO","2012-9-01"));

        assertTrue(medicina.ConsultaMedicina(2));

        assertTrue(medicina.ActualizaMedicina(2,"NAPROXENO","PHARMA","NAPROXENO","NAPROXENO","2013-9-01"));

        assertTrue(medicina.BajaMedicina(2));

    }

    public
void testMedicinaValoresNulos(){

        medicina medicina =new medicina();

        assertFalse(medicina.AltaMedicina(3,"","","","NAPROXENO","2012-9-01"));

        assertFalse(medicina.ActualizaMedicina(3,"","","NAPROXENO","NAPROXENO","2013-9-01"));

    }

    public
void testMedicinaValoresNulosPermitidos(){

        medicina medicina =new medicina();

        assertTrue(medicina.AltaMedicina(4,"NAPROXENO","PHARMA","NAPROXENO","","2012-9-01"));

        assertTrue(medicina.ActualizaMedicina(4,"NAPROXENO","PHARMA","NAPROXENO","","2013-9-01"));

    }

    public
static
void main(String args[]){

        junit.textui.TestRunner.run(Test.class);

    }

}


 

Pantalla de Pruebas


Los enlaces de las páginas en que me basé para hacer este trabajo son:

http://www.gsi.dit.upm.es/~legf/doc/lprg/Transparencias%20LPRG/Pruebas%20Unitarias.pdf

http://www.gsi.dit.upm.es/~anieto/doc/lprg/LPRG%20Documentacion%20y%20Pruebas%20Unitarias.pdf

2 comentarios:

  1. Doctora Elisa,

    Corregí las entradas 6 y 7 en base a las observaciones que me había hecho, si las puede revisar por favor.

    Saludos.

    ResponderEliminar
  2. Esta entrada está bien, te pongo 5 puntos por ella. Ahora veo las demás.

    ResponderEliminar