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

  1. Correccion de aserciones
  2. Aislamiento del test
  3. Claridad de nombres
  4. Independencia de datos
  5. Sin riesgos de inestabilidad
  6. Limpieza adecuada
  7. 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.