Genera i test unitari dal codice
Uno strumento che legge una funzione o una classe e scrive i test unitari corrispondenti: casi normali, valori limite, errori attesi. Pensato per chi ha codice senza copertura e vuole aggiungerla senza scrivere ogni test a mano, uno per uno.
Esegui online
Esegui questo sui nostri server con il tuo account. Gli strumenti gratuiti girano nel tuo browser; questo viene addebitato sul tuo saldo KIT al prezzo indicato sopra.
Incolla la funzione, non solo il caso felice
Il problema dei test scritti di corsa è che coprono solo il percorso previsto. Incollando la funzione, il KIT propone anche i casi limite che di solito si saltano: un input vuoto, un valore negativo dove non dovrebbe esserci, una lista con un solo elemento. Escono come test pronti nel framework più comune per quel linguaggio — pytest, Jest, PHPUnit, JUnit — con nomi descrittivi che spiegano cosa verificano.
Perché è in beta
I test generati sono un buon punto di partenza, non la parola definitiva: vanno letti e adattati al tuo progetto, soprattutto quando la funzione dipende da altre parti del codice (database, chiamate esterne) che il generatore non può vedere direttamente. Per questo lo strumento è etichettato beta: funziona bene sul codice isolato, meno su logica molto intrecciata con il resto del sistema.
Cosa cambia rispetto a scriverli da solo
Non elimina il lavoro di revisione, lo sposta: invece di partire dal foglio bianco, parti da una batteria di test già scritta e la correggi dove serve. Per una funzione di validazione, di calcolo o di parsing — le più noiose da testare a mano, una per una — il risparmio di tempo è reale e si nota già dal primo utilizzo.
Prezzo e canali
$0.003 a richiesta più $0.0135 ogni 1.000 parole di codice analizzato, senza costi fissi. Si usa dalla pagina web, incollando la funzione e leggendo subito il risultato pronto da rifinire; lo stesso motore è raggiungibile via API se vuoi collegarlo alla tua pipeline di sviluppo o di integrazione continua, allo stesso prezzo pubblicato, senza differenze di qualità fra i due canali.
Casi d'uso
Coprire un modulo lasciato senza test
Alessandro Ferrari eredita un modulo di calcolo sconti scritto tre anni fa, senza un solo test. Incolla le funzioni una alla volta e ottiene una prima batteria di test da rifinire, invece di partire da zero sotto scadenza.
Prima di un refactoring rischioso
Prima di toccare una funzione centrale di un gestionale per Rossi & Figli S.r.l., generare i test attuali aiuta a verificare che il comportamento resti lo stesso dopo la modifica, anche se la copertura di partenza era scarsa.
Imparare a testare guardando un esempio scritto bene
Chi è alle prime armi con i test unitari può incollare una propria funzione e usare il risultato come esempio concreto di come si struttura un test, invece di leggere solo la documentazione del framework.
Domande frequenti
In che framework escono i test?
Nel più comune per il linguaggio che riconosce: pytest per Python, Jest per JavaScript/TypeScript, PHPUnit per PHP, JUnit per Java. Se ne usi uno diverso, il codice del test resta comunque leggibile e adattabile.
Perché è etichettato beta?
Perché su funzioni che dipendono da database, servizi esterni o stato condiviso il risultato va sempre rivisto: il generatore vede solo il codice che incolli, non il resto del sistema.
Quanto costa?
$0.003 a richiesta più $0.0135 ogni 1.000 parole di codice. Paghi a consumo, prezzo pubblicato, senza abbonamento.
Il mio codice resta privato?
Viene elaborato per generare i test e poi eliminato: non lo conserviamo né lo riutilizziamo. Per codice molto sensibile, valuta comunque cosa incolli, come con qualsiasi strumento online.
Sostituisce i test scritti da una persona?
No: è un punto di partenza. I casi limite più ovvi li trova bene, la logica di business specifica del tuo progetto va sempre riletta da chi lo conosce.
Funziona anche su una classe intera, non solo su una funzione?
Sì, puoi incollare una classe con più metodi: il risultato è più lungo da rileggere, ma copre ogni metodo pubblico con almeno un test.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/unit-tests \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/unit-tests", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/unit-tests",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/unit-tests", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/unit-tests", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"text": "…"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.unit_tests",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
422 | task_failed | L'attività non è andata a buon fine: non ti viene addebitato nulla. |