Gerador de testes unitários
Envie uma função, uma classe ou um módulo e receba a suíte de testes unitários correspondente: casos felizes, entradas inválidas e os casos de borda que ninguém lembra às cinco da tarde. Para o dev que sabe que precisa testar, mas nunca encontra tempo de escrever o esqueleto todo.
Rode online
Rode nos nossos servidores com a sua conta. As ferramentas grátis rodam no seu navegador; esta aqui é descontada do seu saldo do KIT pelo preço acima.
Do código à suíte
Você manda o código-fonte pela API e recebe de volta um arquivo de testes: funções de teste nomeadas, arranjo, execução e verificação prontos, no estilo do framework usual da linguagem enviada. O resultado cobre o caminho feliz e também o que costuma ficar de fora — string vazia, número negativo, lista com um item só, nulo onde ninguém esperava. É o esqueleto completo da suíte para você revisar e rodar.
Casos de borda: onde mora o valor
Escrever o teste do caso óbvio qualquer um escreve. O ganho real está nas bordas: o desconto que zera o total, o CPF com formatação inesperada, a data 29 de fevereiro. O serviço propõe essas variações sistematicamente, porque não fica com preguiça no décimo caso. Parte delas você vai descartar como impossíveis no seu contexto — as outras são bugs que deixaram de chegar em produção.
Um serviço em beta
Esta capacidade está em beta: os testes gerados compilam e fazem sentido na grande maioria dos casos, mas podem vir com uma asserção a ajustar ou um mock incompleto quando o código depende de muita coisa externa. Rode a suíte antes de confiar nela — teste que não roda não protege ninguém. O status beta está na página porque preferimos dizer a você exatamente o que esperar.
Quanto custa
US$ 0,003 por chamada, mais US$ 0,0135 por bloco de 1.000 palavras de código analisado. Gerar testes para um módulo de 3.000 palavras custa em torno de US$ 0,04, em dólares americanos. Compare com o custo de uma tarde de trabalho — ou com o custo de um bug de cálculo chegando na fatura de um cliente. Pagamento por uso, sem plano nem fidelidade.
Onde encaixar no seu fluxo
Dois encaixes funcionam bem. No dia a dia: antes de abrir o pull request, gere a suíte da função nova e revise. No pipeline: um script identifica arquivos alterados sem teste correspondente, chama a API e anexa a proposta de suíte como comentário no PR. Nos dois casos a decisão final é humana — a API elimina a página em branco, não o revisor.
Casos de uso
Cobertura antes da auditoria
Uma software house de Recife precisa mostrar cobertura de testes para fechar contrato com um cliente grande. Em vez de parar a equipe por um mês, gera as suítes módulo a módulo pela API, revisa e ajusta — e o número de cobertura sobe semana a semana.
Legado que ninguém ousa tocar
O sistema de faturamento da Distribuidora Horizonte Verde funciona, mas ninguém mexe nele sem medo. Gerar testes para o código existente cria a rede de proteção que faltava: primeiro a suíte, depois a refatoração.
Freelancer que entrega com testes
Carlos Eduardo Souza entrega cada projeto com suíte de testes incluída — argumento de venda que o diferencia no orçamento. A API gera o grosso; ele revisa, completa os casos de negócio e entrega.
Perguntas frequentes
Sai em qual framework de teste?
No padrão usual da linguagem enviada — e, se você indicar o framework na chamada, o resultado segue essa convenção. Vale um teste com um arquivo pequeno para conferir o estilo antes de processar o projeto.
Os testes gerados passam de primeira?
Muitos sim, alguns não — e está tudo bem. Um teste que falha pode estar errado ou pode ter encontrado um bug de verdade; os dois desfechos valem o preço. Rode a suíte, leia as falhas e decida caso a caso.
Por que essa capacidade é beta?
Porque código com muitas dependências externas ainda pede ajuste manual nos mocks. Avisamos aqui na página em vez de deixar você descobrir sozinho na primeira chamada.
Meu código é confidencial. E agora?
O fonte é processado para gerar a suíte da sua tarefa, e nada dele fica exposto a outros usuários. Antes de enviar, remova segredos — chaves, senhas, tokens —, como faria com qualquer serviço externo. Se a política da sua empresa exigir, envie só os módulos menos sensíveis.
Posso automatizar no meu pipeline?
Sim: é uma chamada HTTP, então cabe em qualquer CI. O padrão que funciona bem é gerar a suíte como sugestão no pull request e deixar o merge com um humano.
Quanto sai um projeto inteiro?
A conta é transparente: US$ 0,003 por chamada mais US$ 0,0135 por bloco de 1.000 palavras. Um projeto com 50.000 palavras de código fica em torno de US$ 0,70 — em dólares, pagos por uso via PayPal, sem assinatura.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "…"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.unit_tests",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
422 | task_failed | A tarefa falhou do nosso lado. Você não paga nada por ela. |