Por Que Revisar Codigo de Tests?
El codigo de tests es codigo de produccion. Se ejecuta en pipelines CI/CD, afecta decisiones de deployment y se mantiene durante anos. Sin embargo, muchos equipos lo tratan como ciudadano de segunda clase. El resultado: una suite fragil e inmantenible en la que nadie confia.
Checklist de Revision
1. El Test Prueba Lo Que Dice?
// MAL — nombre dice "creacion" pero test solo verifica navegacion
@Test
void testUserCreation() {
loginPage.login("admin", "pass");
createUserPage.fillForm("Alice", "alice@test.com");
createUserPage.submit();
// Sin asercion de que el usuario fue creado!
}
// BIEN — asercion coincide con el nombre
@Test
void testUserCreation() {
loginPage.login("admin", "pass");
createUserPage.fillForm("Alice", "alice@test.com");
createUserPage.submit();
assertTrue(userService.exists("alice@test.com"));
}
2. Nombres de Tests
// MAL
@Test void test1() { ... }
// BIEN
@Test void should_showDashboard_when_loginWithValidCredentials() { ... }
@Test void should_showError_when_loginWithExpiredPassword() { ... }
3. Estructura Arrange-Act-Assert
@Test
void should_applyDiscount_when_couponIsValid() {
// Arrange
Order order = OrderFactory.createWithTotal(100.00);
Coupon coupon = CouponFactory.createValid("SAVE20", 20);
// Act
order.applyCoupon(coupon);
// Assert
assertEquals(80.00, order.getTotal(), 0.01);
}
4. Una Preocupacion por Test
5. Sin Logica en Tests
// MAL — logica en test
@Test void testUserRoles() {
for (String role : List.of("admin", "user")) {
if (role.equals("admin")) assertTrue(user.canDelete());
}
}
// BIEN — tests separados
@Test void admin_canDelete() { ... }
@Test void regularUser_cannotDelete() { ... }
Anti-Patrones Comunes
Mystery Guest
El test depende de estado externo no visible.
Eager Test
Un test que verifica demasiadas cosas a la vez.
The Giant
Un metodo de test con 100+ lineas imposible de entender.
Igualdad Sensible
// MAL
assertEquals(expectedUser.toString(), actualUser.toString());
// BIEN
assertEquals("Alice", actualUser.getName());
Esperas Hardcodeadas
// MAL
await page.waitForTimeout(5000);
// BIEN
await expect(page.locator('.result')).toBeVisible();
Guias de Revision para Equipos
Que Deben Verificar los Revisores
- Correccion de aserciones
- Aislamiento del test
- Claridad de nombres
- Independencia de datos
- Sin riesgos de inestabilidad
- Limpieza adecuada
- Legibilidad
Que NO Deben Criticar los Revisores
- Preferencias menores de formato
- Eleccion de biblioteca de aserciones
- Valores de datos de test irrelevantes
Ejercicios
Ejercicio 1: Deteccion de Anti-Patrones
Revisa 5 muestras de codigo de test e identifica todos los anti-patrones. Propone soluciones.
Ejercicio 2: Refactorizacion de Nombres
Renombra 10 metodos de test mal nombrados siguiendo should_outcome_when_condition.
Ejercicio 3: Documento de Estandares
Crea un documento de estandares de revision de codigo de tests con convenciones, reglas, anti-patrones y ejemplos.