Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: ivan15 en 24 de Octubre 2015, 00:21

Título: Java ejemplo test unitarios con Junit, pruebas Assert Assert.equals
Publicado por: ivan15 en 24 de Octubre 2015, 00:21
Hola, estuve haciendo este ejercicio que me dieron

Citar
2. Implementar la clase DiasLluviosos, con sus respectivas pruebas unitarias, donde se almacene si llovió o no en un día del año y cuente con los siguientes métodos:

- void registrarQueLlovioElDia (int diaDeAño, boolean llovio)

- boolean consultarSiLlovioElDia (int diaDelAño)

- int contarDiasLluviosos ()

- int consultarCuatrimestreMasLluvioso()

- int consultarPrimerDiaConLluvia()


Pero me tira un error cuando quiero hacer una prueba con jUnit para probar el cuatrimestre mas lluvioso, alguien podria darme alguna mano?


aca dejo el codigo del pronostico:

Código: [Seleccionar]
package guia7Arrays;

public class DiasLluviosos {

private boolean[] dias;

public DiasLluviosos() {

dias = new boolean[365];
for (int i = 0 ; i < dias.length ; i++) {
dias[i] = false;

}

}

public void registrarQueLlovioElDia(int diaDeAño, boolean llovio) {

validarDia(diaDeAño);
dias[diaDeAño] = llovio;

}

public boolean consultarSiLlovioElDia(int diaDelAño) {

validarDia(diaDelAño);
return dias[diaDelAño];
}

public int contarDiasLluviosos() {

int diasLluviosos = 0;

for(int i = 0; i < dias.length ; i++) {

if(dias[i] == true) {
diasLluviosos++;

}

}

return diasLluviosos;
}

public int consultarCuatrimestreMasLluvioso() {

int cuatrimestreMasLluvioso = 0;
int cuatrimestres[];
cuatrimestres = new int[3];

cuatrimestres[0] = diasLlovidosEnRango(1 , 121);
cuatrimestres[1] = diasLlovidosEnRango(121 , 243);
cuatrimestres[2] = diasLlovidosEnRango(244 , 365);

if(cuatrimestres[0] < cuatrimestres[1] ) {
cuatrimestreMasLluvioso = 0;

} else {

if(cuatrimestres[0] < cuatrimestres[2] ) {
cuatrimestreMasLluvioso = 1;

}

}

if(cuatrimestres[1] < cuatrimestres [2] ) {
cuatrimestreMasLluvioso = 2;

}

return cuatrimestreMasLluvioso;

}

public int consultarPrimerDiaConLluvia() {

boolean primerDiaLluviosoNoEncontrado = true;
int primerDiaConLluvia = 0;

for(int i = 0 ; i < dias.length && primerDiaLluviosoNoEncontrado ; i++ ) {

if(dias[i] == true) {
primerDiaLluviosoNoEncontrado = false;
primerDiaConLluvia = i;

}

}

return primerDiaConLluvia;

}

private int validarDia(int diaDeAño) {

Error diaIncorrecto = new Error("dia fuera del rango (0 ; 365]");

if(diaDeAño <= 0 || diaDeAño > 365) {
throw diaIncorrecto;

}

return diaDeAño;

}

private int diasLlovidosEnRango( int inicio, int fin ){

int total = 0;

for( int i = inicio; i <= fin; i++ ) {

if ( dias[i] ) {
total++;

}

}

return total;
}

}



y aca el codigo de la prueba que me tira error, es la que se llama consultarCuatrimestreMasLluvioso

Código: [Seleccionar]
package pruebasJUnit;
import guia7Arrays.DiasLluviosos;
import org.junit.Test;
import org.junit.Assert;

public class pruebasDiasLluviosos {

@Test
public void probarSiInicializaConTodosLosDiasSinLlover() {

DiasLluviosos dias = new DiasLluviosos();

int diasConLluvia = dias.contarDiasLluviosos();

Assert.assertEquals(0, diasConLluvia);

}

@Test
public void probarSiRegistraDiasLluviosoYLosCuenta() {

DiasLluviosos dias = new DiasLluviosos();

dias.registrarQueLlovioElDia(1, true);
dias.registrarQueLlovioElDia(2, true);
dias.registrarQueLlovioElDia(3, true);
int diasConLluvia = dias.contarDiasLluviosos();

Assert.assertEquals(3, diasConLluvia);

}

@Test
public void probarConsultarSiLlovioElDia() {

DiasLluviosos dias = new DiasLluviosos();

dias.registrarQueLlovioElDia(3, true);
boolean llovioElDia = dias.consultarSiLlovioElDia(3);

Assert.assertTrue(llovioElDia);

}

@Test
public void probarConsultarPrimerDiaConLluvia() {

DiasLluviosos dias = new DiasLluviosos();

dias.registrarQueLlovioElDia(340, true);
int primerDiaQueLlovio = dias.consultarPrimerDiaConLluvia();

Assert.assertEquals(340, primerDiaQueLlovio);

}

@Test
public void consultarCuatrimestreMasLluvioso() {  /*<--------Preguntar porque me tira error en esta prueba*/

DiasLluviosos dias = new DiasLluviosos();

dias.registrarQueLlovioElDia(121, true);
dias.registrarQueLlovioElDia(130, true);
dias.registrarQueLlovioElDia(140, true);
dias.registrarQueLlovioElDia(145, true);
dias.registrarQueLlovioElDia(150, true);
dias.registrarQueLlovioElDia(160, true);
dias.registrarQueLlovioElDia(166, true);
dias.registrarQueLlovioElDia(200, true);

int cuatrimestreMasLluvioso = dias.consultarCuatrimestreMasLluvioso();

Assert.assertEquals(1 , cuatrimestreMasLluvioso);

}

}

tambien les dejo el error que me tira, saludos y gracias de ante mano

(http://i.imgur.com/EcIGhDX.jpg)
Título: Re:Java ejemplo test unitarios con Junit, pruebas Assert Assert.equals
Publicado por: César Krall en 26 de Octubre 2015, 12:04
Hola!

Aquí parece que tienes un problema: i <= fin dentro del método private int diasLlovidosEnRango( int inicio, int fin )

Código: [Seleccionar]
    private int diasLlovidosEnRango( int inicio, int fin ){

        int total = 0;

        for( int i = inicio; i <= fin; i++ ) {

            if ( dias[i] ) {
                total++;

            }

        }

        return total;
    }

Los índices del array de días van de 0 a 364, si tú haces una llamada como cuatrimestres[2] = diasLlovidosEnRango(244 , 365);

al pasar el 365 no estás dentro de los índices del array y te tira un error.

Tienes que pensar si estos índices:

Código: [Seleccionar]
        cuatrimestres[0] = diasLlovidosEnRango(1 , 121);
        cuatrimestres[1] = diasLlovidosEnRango(121 , 243);
        cuatrimestres[2] = diasLlovidosEnRango(244 , 365);

Debes cambiarlos

Código: [Seleccionar]
        cuatrimestres[0] = diasLlovidosEnRango(0 , 120);
        cuatrimestres[1] = diasLlovidosEnRango(121 , 242);
        cuatrimestres[2] = diasLlovidosEnRango(243 , 364);

Habría que revisar todos los índices y hacer pruebas.

Saludos!
Título: Re:Java ejemplo test unitarios con Junit, pruebas Assert Assert.equals
Publicado por: ivan15 en 28 de Octubre 2015, 03:39
gracias, muchas gracias ya pude arreglarlo! era eso que mencionaste