A4 · Ejercicios de pruebas automáticas¶
En cada ejercicio escribes una función y sus pruebas, en el mismo archivo, con el marco de pruebas de tu lenguaje. Tu archivo debe ejecutarse y pasar todas las pruebas: el resultado esperado indica cuántas.
Ejercicio A4.1¶
Factorial con pruebas. Escribe factorial(n) (el producto de los números de 1 a n; el factorial de 0 es 1) y estas 4 pruebas:
- El factorial de
0es1. - El factorial de
1es1. - El factorial de
5es120. - Un número negativo lanza un error.
Resultado esperado al ejecutar las pruebas:
4 pruebas correctas
En Java
Con JUnit 4: métodos @Test en una clase pública. Para el error: assertThrows(IllegalArgumentException.class, () -> ...).
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import org.junit.Test;
class Funciones {
static long factorial(int n) {
// ... (resto de la solución bloqueado)Ejercicio A4.2¶
Palíndromos con pruebas. Escribe esPalindromo(texto), que dice si un texto se lee igual del derecho que del revés, sin tener en cuenta mayúsculas ni espacios, y estas 4 pruebas:
Anita lava la tinaes palíndromo.holano lo es.- Un texto vacío es palíndromo.
Anaes palíndromo aunque tenga mayúsculas.
Resultado esperado al ejecutar las pruebas:
4 pruebas correctas
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
class Funciones {
static boolean esPalindromo(String texto) {
// ... (resto de la solución bloqueado)Ejercicio A4.3¶
Descuento con validación. Escribe descuento(precio, porcentaje), que devuelve el precio después de rebajar el porcentaje indicado. Los precios van en céntimos (enteros) y el resultado también (usa la división entera). Si el porcentaje no está entre 0 y 100, lanza un error.
Escribe estas 4 pruebas:
- Con
0 %, el precio no cambia. - Con
100 %, el precio es0. 25 %de2000es1500.- Un porcentaje de
101lanza un error.
Resultado esperado al ejecutar las pruebas:
4 pruebas correctas
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import org.junit.Test;
class Funciones {
static int descuento(int precio, int porcentaje) {
// ... (resto de la solución bloqueado)Ejercicio A4.4¶
Un contador, probado por separado. Escribe una clase Contador con una operación incrementar (suma 1), una operación reiniciar (vuelve a 0) y un valor actual. Usa la preparación previa de tu marco de pruebas para crear un contador nuevo antes de cada prueba.
Escribe estas 3 pruebas:
- Un contador nuevo vale
0. - Tras incrementar dos veces vale
2. - Tras incrementar y reiniciar vale
0.
Resultado esperado al ejecutar las pruebas:
3 pruebas correctas
En Java
Un método con @Before se ejecuta antes de cada @Test.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
class Contador {
private int valor = 0;
// ... (resto de la solución bloqueado)Ejercicio A4.5¶
Casos límite. Escribe categoria(edad): niño de 0 a 12, adolescente de 13 a 17, adulto de 18 a 64 y mayor desde 65. Una edad negativa lanza un error.
Escribe solo 2 pruebas: una que compruebe todos los límites (0, 12, 13, 17, 18, 64 y 65) recorriendo una tabla de casos, y otra para la edad negativa.
Resultado esperado al ejecutar las pruebas:
2 pruebas correctas
En Java
Un Map o dos arrays paralelos y un bucle dentro de un método @Test.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import java.util.Map;
import java.util.TreeMap;
import org.junit.Test;
// ... (resto de la solución bloqueado)Ejercicio A4.6¶
Un reloj falso. Escribe saludo(reloj), donde reloj es una función que devuelve la hora actual (de 0 a 23). Devuelve buenos días antes de las 12, buenas tardes antes de las 20 y buenas noches el resto.
Escribe estas 3 pruebas, usando un reloj falso que devuelva siempre la hora que quieras: a las 8, a las 15 y a las 22.
Resultado esperado al ejecutar las pruebas:
3 pruebas correctas
En Java
Usa java.util.function.IntSupplier; el reloj falso es () -> 8.
Solución modelo (bloqueada)
🔒 La solución completa está bloqueada. Esto es solo un ejemplo de cómo empieza:
import static org.junit.Assert.assertEquals;
import java.util.function.IntSupplier;
import org.junit.Test;
class Funciones {
static String saludo(IntSupplier reloj) {
// ... (resto de la solución bloqueado)