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: Tuplado en 11 de Octubre 2012, 14:53

Título: Multiplicar dos numeros con java entrada teclado y test con JUnit assertEquals
Publicado por: Tuplado en 11 de Octubre 2012, 14:53
Hola chicos/cas:

Aguién sabe como se puede multiplicar 2 números en java con entrada por teclado
y luego testearlos con JUnit.


Un saludo y gracias de antemano
Título: Re:Multiplica 2 numeros con java
Publicado por: nosferacento en 11 de Octubre 2012, 17:25
Te digo un posible planteamiento:

lo primero es definir la clase que queremos probar. Yo voy a definir:

public class Multiplicador {

    //No declaramos campos

    public Multiplicador () {
        //Nada que declarar
    }

    public int multiplica (int a, int b) {       return a*b;   }

}

Esta clase simplemente me permite crear un objeto con un método que devuelve el resultado de multiplicar dos números.

Ahora voy a probar con JUnit que el método devuelve el resultado correcto. Para ello creo una clase de test donde se pide al usuario que entre por teclado dos números y se comprueba que el resultado sea correcto:

import java.util.Scanner;
public class MultiplicadorTest extends junit.framework.TestCase {
    private Multiplicador objeto1;

    public void testOperacion(){
        System.out.println ("Por favor introduce el primer número");
        int entradaTeclado1 = 0;
        Scanner sc1 = new Scanner(System.in);
        entradaTeclado1 = Integer.parseInt(sc1.nextLine());
        System.out.println ("Por favor introduce el segundo número");
        int entradaTeclado2 = 0;
        Scanner sc2 = new Scanner(System.in);
        entradaTeclado2 = Integer.parseInt(sc2.nextLine());
        objeto1 = new Multiplicador();
        int resultado;
        resultado = objeto1.multiplica(entradaTeclado1, entradaTeclado2);
        assertEquals (resultado, entradaTeclado1*entradaTeclado2);
    }

}


Al ejecutar el método test JUnit me dice "OK"; si escribiéramos

assertEquals (99, entradaTeclado1*entradaTeclado2);

El resultado que obtendríamos sería junit.framework.AssertionFailedError: expected:<99> but was:<20>, es decir, en este caso no se cumple la aserción que hemos especificado.

Título: Re:Multiplica 2 numeros con java
Publicado por: Tuplado en 13 de Octubre 2012, 20:55
Gracia nosferacento.

Me has ayudado un montón, pq estaba más que verde con el framework de JUnit.

Un saludo campeón
Título: Re:Multiplica 2 numeros con java
Publicado por: Tuplado en 13 de Octubre 2012, 21:20
Mira nosferacento me surgen dos dudas.

La primera el objeto 1, a que te refieres a  public int multiplica (int a, int b)

La segunda: la declaración    public class Multiplicador no aparece en el archivo JUnit importada.   no se importa como import Multiplicador;


Disculpa por no tener muchos conocimientos todavía en JUnit.

Un saludo grande campeón
Título: Re:Multiplica 2 numeros con java
Publicado por: nosferacento en 14 de Octubre 2012, 21:18
El objeto1 es un objeto de una clase que he definido, la clase Multiplicador.

public class Multiplicador {
    //No declaramos campos
    public Multiplicador () {
        //Nada que declarar
    }
    public int multiplica (int a, int b) {       return a*b;   }
}

public int multiplica (int a, int b) {       return a*b;   } Es un método de la clase. Cuando creamos objetos de la clase, estos objetos tienen un método disponible denominado "multiplica" que espera dos enteros y devuelve otro entero. El entero que devuelve es el resultado de multiplicar los dos que recibe.

Entonces lo que yo trato de probar es que este método devuelve el resultado de multiplicar dos enteros, y esto lo pruebo con Junit.

En la clase de Junit no necesito hacer un import de Multiplicador porque esta clase es una clase que estoy utilizando y que tengo en el mismo package. De hecho, la clase que yo estoy probando con JUnit es la clase Multiplicador. Las clases que están situadas en un mismo sitio no necesitan ser importadas, pueden usarse directamente (siempre que tengamos acceso).