Escribir tests unitarios para código heredado antes de tocarlo
Crea tests de caracterización para código legacy sin tests: fija el comportamiento actual, aísla dependencias como base de datos o fecha y prepara un refactor seguro paso a paso. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Actúa como desarrollador sénior experto en trabajar con código heredado y en testing (técnicas de tests de caracterización y puntos de separación o «seams»).
Contexto:
- Lenguaje y framework de tests: {{lenguaje}}
- Dependencias difíciles que usa el código (base de datos, fecha actual, red, ficheros, variables globales): {{dependencias}}
- Mi objetivo después de tener tests: {{objetivo}}
- Código:
```
{{codigo}}
```
Entregables:
1. Mapa del comportamiento: entradas, salidas, efectos secundarios y ramas del código, en una lista breve.
2. Puntos de separación: dónde y cómo aislar cada dependencia con el cambio mínimo y seguro (inyección por parámetro, envolver la llamada, reloj falso), sin alterar el comportamiento.
3. Tests de caracterización que fijen el comportamiento ACTUAL, incluso si parece un error. Marca con un comentario «POSIBLE BUG» los casos sospechosos en lugar de corregirlos.
4. Casos límite: valores vacíos, nulos, extremos, errores de las dependencias.
5. Qué cobertura de ramas se consigue y qué queda sin cubrir y por qué.
6. Plan de refactor en pasos pequeños, cada uno verificable con los tests, orientado a {{objetivo}}.
Restricciones:
- No cambies la lógica del código en los tests ni en los puntos de separación.
- No inventes el resultado esperado de un caso si no puede deducirse del código: márcalo como [COMPLETAR: ejecutar y copiar la salida real] y explica cómo obtenerla.
- Usa nombres de test descriptivos (dado / cuando / entonces).
- Si falta código del que depende la función, pídemelo antes.
Formato: secciones numeradas y bloques de código listos para ejecutar.Cómo usarlo
Pega la función o clase completa y nombra las dependencias externas que conozcas. Ejecuta los tests sobre el código sin modificar: todos deben pasar antes de empezar a refactorizar.
Ejemplo de uso
Lenguaje: Python 3.11 con pytest · Dependencias: datetime.now() y consultas a MySQL · Objetivo: dividir una función de 300 líneas que calcula comisiones.
Resultado de ejemplo
Suponiendo que la función completa lee los pedidos del cliente con PDO y usa date() para la antigüedad…
2. Costuras
- Base de datos: añadir un parámetro opcional
?PDO $pdo = nullque, si esnull, usa la conexión actual. - Fecha: añadir
?DateTimeImmutable $ahora = nully sustituirdate()por$ahora->format(...).
Ambos cambios mantienen intactas todas las llamadas existentes.
3. Tests de caracterización
<?php
use PHPUnit\Framework\TestCase;
final class CalcularDescuentoTest extends TestCase
{
private PDO $pdo;
protected function setUp(): void
{
$this->pdo = new PDO('sqlite::memory:');
// Esquema mínimo que imita la tabla real: [COMPLETAR]
$this->pdo->exec('CREATE TABLE pedidos (cliente_id INT, total REAL, creado_en TEXT)');
}
public function test_dado_cliente_sin_pedidos_cuando_total_100_entonces_resultado_actual(): void
{
$ahora = new DateTimeImmutable('2025-03-15 10:00:00');
$resultado = calcularDescuento(['id' => 42], 100.0, $this->pdo, $ahora);
$this->assertSame(0.0, $resultado); // [COMPLETAR: ejecuta y pega la salida real]
}
public function test_dado_total_negativo_entonces_no_lanza_excepcion(): void
{
// POSIBLE BUG: un total negativo no se rechaza; fijamos el comportamiento actual
$resultado = calcularDescuento(['id' => 42], -50.0, $this->pdo, new DateTimeImmutable());
$this->assertIsFloat($resultado);
}
}
Primero ejecuta cada test, copia el valor real en la aserción y solo entonces empieza a refactorizar…
Datos clave
- Categoría
- Programación y desarrollo · Refactorización
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Lenguaje y framework de tests, Dependencias difíciles, Objetivo posterior y Código
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Qué es un test de caracterización?
Un test que documenta lo que el código hace hoy, no lo que debería hacer. Sirve de red de seguridad: si al refactorizar cambia un resultado, el test te avisa.
¿Y si el código tiene un error evidente?
Primero fíjalo en un test marcado como posible bug y termina la red de seguridad. Corrígelo después en un cambio separado, para no mezclar refactor y cambio de comportamiento.
¿Para qué sirve este prompt?
Crea tests de caracterización para código legacy sin tests: fija el comportamiento actual, aísla dependencias como base de datos o fecha y prepara un refactor seguro paso a paso.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Lenguaje y framework de tests, Dependencias difíciles, Objetivo posterior y Código). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.