Scrivere unit test per codice legacy prima di modificarlo
Crea test di caratterizzazione per codice legacy senza test: fissa il comportamento attuale, isola dipendenze come database o orologio e pianifica un refactoring sicuro passo passo. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 4 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.
Intermedio · Codice · In attesa di revisione editoriale
Prompt
Agisci come sviluppatore senior esperto di codice legacy e testing (test di caratterizzazione e punti di separazione o «seam»).
Contesto:
- Linguaggio e framework di test: {{linguaggio}}
- Dipendenze difficili usate dal codice (database, data corrente, rete, file, variabili globali): {{dipendenze}}
- Il mio obiettivo una volta avuti i test: {{obiettivo}}
- Codice:
```
{{codice}}
```
Consegne:
1. Mappa del comportamento: input, output, effetti collaterali e rami del codice, in un elenco breve.
2. Punti di separazione: dove e come isolare ogni dipendenza con la modifica minima e sicura (iniezione via parametro, wrapper della chiamata, orologio finto) senza alterare il comportamento.
3. Test di caratterizzazione che fissino il comportamento ATTUALE, anche se sembra sbagliato. Segna i casi sospetti con un commento «POSSIBILE BUG» invece di correggerli.
4. Casi limite: valori vuoti, nulli, estremi, errori delle dipendenze.
5. Copertura dei rami ottenuta, cosa resta scoperto e perché.
6. Piano di refactoring a piccoli passi, ciascuno verificabile con i test, orientato a {{obiettivo}}.
Vincoli:
- Non modificare la logica del codice né nei test né nei punti di separazione.
- Non inventare il risultato atteso di un caso se non si deduce dal codice: segnalo con [DA COMPLETARE: eseguire e incollare l'output reale] e spiega come ottenerlo.
- Usa nomi di test descrittivi (dato / quando / allora).
- Se manca codice da cui dipende la funzione, chiedimelo prima.
Formato: sezioni numerate e blocchi di codice pronti da eseguire.Come usarlo
Incolla la funzione o la classe completa e indica le dipendenze esterne che conosci. Esegui i test sul codice non modificato: devono passare tutti prima di iniziare il refactoring.
Esempio d'uso
Linguaggio: Python 3.11 con pytest · Dipendenze: datetime.now() e query MySQL · Obiettivo: suddividere una funzione di 300 righe che calcola le provvigioni.
Esempio di risultato
Supponendo che la funzione completa legga gli ordini del cliente con PDO e usi date() per l’anzianità…
2. Seam
- Database: aggiungere un parametro opzionale
?PDO $pdo = nullche, senull, usa la connessione attuale. - Data: aggiungere
?DateTimeImmutable $adesso = nulle sostituiredate()con$adesso->format(...).
Entrambe le modifiche lasciano invariate tutte le chiamate esistenti.
3. Test di caratterizzazione
<?php
use PHPUnit\Framework\TestCase;
final class CalcolaScontoTest extends TestCase
{
private PDO $pdo;
protected function setUp(): void
{
$this->pdo = new PDO('sqlite::memory:');
// Schema minimo che imita la tabella reale: [DA COMPLETARE]
$this->pdo->exec('CREATE TABLE ordini (cliente_id INT, totale REAL, creato_il TEXT)');
}
public function test_dato_cliente_senza_ordini_quando_totale_100_allora_risultato_attuale(): void
{
$adesso = new DateTimeImmutable('2025-03-15 10:00:00');
$risultato = calcolaSconto(['id' => 42], 100.0, $this->pdo, $adesso);
$this->assertSame(0.0, $risultato); // [DA COMPLETARE: esegui e incolla l’output reale]
}
public function test_dato_totale_negativo_allora_nessuna_eccezione(): void
{
// POSSIBILE BUG: un totale negativo non viene rifiutato; fissiamo il comportamento attuale
$risultato = calcolaSconto(['id' => 42], -50.0, $this->pdo, new DateTimeImmutable());
$this->assertIsFloat($risultato);
}
}
Esegui prima ogni test, copia il valore reale nell’asserzione e solo dopo inizia il refactoring…
Dati chiave
- Categoria
- Programmazione e sviluppo · Refactoring
- Tipo di output
- Codice
- Livello
- Intermedio
- Pensato per
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificato in
- In attesa di verifica editoriale
- Variabili
- Linguaggio e framework di test, Dipendenze difficili, Obiettivo successivo e Codice
- Lingua
- Italiano
- Prezzo
- Gratuito, senza registrazione
- Aggiornato
- 07/11/2026
Domande frequenti
Che cos’è un test di caratterizzazione?
Un test che documenta cosa fa il codice oggi, non cosa dovrebbe fare. Funziona da rete di sicurezza: se un refactoring cambia un risultato, il test lo segnala.
E se il codice ha un bug evidente?
Fissalo prima in un test marcato come possibile bug e completa la rete di sicurezza. Correggilo poi in una modifica separata, per non mescolare refactoring e cambi di comportamento.
A cosa serve questo prompt?
Crea test di caratterizzazione per codice legacy senza test: fissa il comportamento attuale, isola dipendenze come database o orologio e pianifica un refactoring sicuro passo passo.
Con quali strumenti di IA funziona?
È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.
Come personalizzo il prompt?
Clicca su «Personalizza» e compila le variabili (Linguaggio e framework di test, Dipendenze difficili, Obiettivo successivo e Codice). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.
Serve esperienza per usarlo?
È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.
Questo prompt è gratuito?
Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.
Posso fidarmi dell'output dell'IA?
Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.