Diferencia entre revisiones de «Tests De JUnit Parametrizados»
Línea 47: | Línea 47: | ||
<br> | <br> | ||
− | < | + | Este sería el test |
+ | |||
+ | <code java="java"> | ||
+ | import static org.junit.Assert.assertEquals; | ||
+ | |||
+ | import java.util.Arrays; | ||
+ | import java.util.Collection; | ||
+ | |||
+ | import org.junit.Test; | ||
+ | import org.junit.runner.RunWith; | ||
+ | import org.junit.runners.Parameterized; | ||
+ | import org.junit.runners.Parameterized.Parameters; | ||
+ | |||
+ | @RunWith(Parameterized.class) | ||
+ | public class CalculadoraSecuenciaTest { | ||
+ | |||
+ | private String numero; | ||
+ | private int baseOrigen; | ||
+ | private int baseDestino; | ||
+ | private String resultado; | ||
+ | |||
+ | @Parameters | ||
+ | public static Collection<Object[]> data() { | ||
+ | Object[][] data = { | ||
+ | //Numero BaseOrigen BaseDestino Resultado | ||
+ | { "10", 2, 10, "2" }, | ||
+ | { "255", 10, 16, "FF" }, | ||
+ | { "AB", 16, 10, "171" }, | ||
+ | { "255", 10, 2, "11111111" } | ||
+ | }; | ||
+ | return Arrays.asList(data); | ||
+ | } | ||
+ | |||
+ | public CalculadoraSecuenciaTest(String numero, int baseOrigen, int baseDestino, String resultado) { | ||
+ | this.numero = numero; | ||
+ | this.baseOrigen = baseOrigen; | ||
+ | this.baseDestino = baseDestino; | ||
+ | this.resultado = resultado; | ||
+ | } | ||
+ | |||
+ | @Test | ||
+ | public void calcular_conNumeroYBases_retornaResultado() { | ||
+ | String resultadoObtenido = Calculadora.calcular(numero, baseOrigen, baseDestino); | ||
+ | assertEquals(resultado, resultadoObtenido); | ||
+ | } | ||
+ | } | ||
+ | <code> | ||
+ | |||
+ | |||
− | |||
=== Ver también === | === Ver también === | ||
− | *[[JUnit]] | + | *[[JUnit]]</code> |
Revisión del 19:23 6 oct 2009
Hay situaciones en las que debemos correr un tests varias veces pero con diferente juego de datos. Para estos casos JUnit tiene un Runner que permite que escribamos el caso de test separado del juego de datos.
Supongamos el test de una clase que convierte un número de una base en otra. En lugar de escribir varios métodos @Test, se escribe un sólo método @Test que JUnit correrá con cada juego de datos.
Clase a testear:
public class Calculadora {
... public static String calcular(String numero, int baseOrigen, int baseDestino) { ... //calcula el resultado return resultado;
}
Valores que se eligen para el test:
Número |
Base Origen |
Base Destino |
Salida |
10 |
2 |
10 |
2 |
255 |
10 |
16 |
FF |
AB |
16 |
10 |
171 |
255 |
10 |
2 |
11111111 |
Este sería el test
import static org.junit.Assert.assertEquals;
import java.util.Arrays; import java.util.Collection;
import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class) public class CalculadoraSecuenciaTest {
private String numero; private int baseOrigen; private int baseDestino; private String resultado; @Parameters public static Collection<Object[]> data() { Object[][] data = { //Numero BaseOrigen BaseDestino Resultado { "10", 2, 10, "2" }, { "255", 10, 16, "FF" }, { "AB", 16, 10, "171" }, { "255", 10, 2, "11111111" } }; return Arrays.asList(data); } public CalculadoraSecuenciaTest(String numero, int baseOrigen, int baseDestino, String resultado) { this.numero = numero; this.baseOrigen = baseOrigen; this.baseDestino = baseDestino; this.resultado = resultado; } @Test public void calcular_conNumeroYBases_retornaResultado() { String resultadoObtenido = Calculadora.calcular(numero, baseOrigen, baseDestino); assertEquals(resultado, resultadoObtenido); }
} <code>