Test Code Generator
Gera código de teste Vitest a partir de especificações JSON usando análise de valor limite e particionamento de equivalência.
GitHub
2
Experimente este MCPPatrocinadoDocumentação
Servidor MCP Test Code Generator
Um servidor MCP que gera código de teste Vitest com base em análise de valor limite e particionamento de equivalência a partir de especificações JSON.
Recursos
- Análise de Valor Limite: Gera automaticamente valores limite e seus valores adjacentes para intervalos contínuos
- Suporte a Múltiplos Intervalos: Lida com intervalos válidos descontínuos (ex.: 0-10, 20-30, 40-50)
- Particionamento de Equivalência: Inclui todos os valores válidos e inválidos de dados categóricos
- Teste de Pares: Gera combinações de teste eficientes usando o método de pares
- Formato Vitest: Gera código de teste limpo usando o padrão
test.each - Guia de Especificação: Fornece prompts para ajudar a criar especificações JSON
- Otimizado para Linguagem: Todo o processamento e saída em inglês para desempenho ideal do LLM
Início Rápido
Usando npx (sem instalação necessária)
# Run directly with npx
npx testing-mcp-vitest
# Configure Claude Desktop as shown below
Consulte QUICKSTART.md para instruções detalhadas de configuração.
Instalação
Usando npx (Recomendado)
npx testing-mcp-vitest
Instalação Local
# Clone repository
git clone <repository-url>
cd test-code-generator-mcp
# Install dependencies
npm install
# Build
npm run build
Uso
Configuração do Claude Desktop
Adicione ao seu claude_desktop_config.json:
{
"mcpServers": {
"test-generator": {
"command": "npx",
"args": ["testing-mcp-vitest"]
}
}
}
Locais dos arquivos de configuração:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Ferramentas Disponíveis
1. generate-test-code
Gera código de teste a partir de especificação JSON.
2. Prompts
create-test-spec: Explica como criar especificações de testeboundary-value-example: Fornece exemplos de análise de valor limiteequivalence-class-example: Fornece exemplos de particionamento de equivalência
Formato da Especificação
Estrutura básica com intervalo único:
{
"type": "model",
"name": "UserRegistration",
"columns": [
{
"name": "age",
"type": "number",
"valueType": "continues",
"values": {
"min": 18,
"max": 120
}
},
{
"name": "userType",
"type": "string",
"valueType": "category",
"values": {
"valid": ["admin", "user", "guest"],
"invalid": ["superuser", "root", ""]
}
}
]
}
Exemplo com múltiplos intervalos:
{
"name": "workHours",
"type": "number",
"valueType": "continues",
"values": {
"ranges": [
{ "min": 9, "max": 12 }, // Morning shift
{ "min": 14, "max": 18 } // Afternoon shift
]
}
}
Exemplo de Código de Teste Gerado
import { describe, test, expect } from 'vitest';
describe('Tests for UserRegistration', () => {
// Valid cases
test.each([
{ inputs: { age: 18, userType: "admin" }, description: 'Combination 1: Valid case' },
{ inputs: { age: 69, userType: "user" }, description: 'Combination 2: Valid case' },
{ inputs: { age: 120, userType: "guest" }, description: 'Combination 3: Valid case' },
// ... more test cases
])('Valid case: $description', ({ inputs }) => {
// TODO: Import the function or model to test
// import { UserRegistration } from './path/to/UserRegistration';
// TODO: Execute the test subject
// const result = UserRegistration(inputs);
// TODO: Check expected values
// expect(result).toBeDefined();
// expect(result.error).toBeUndefined();
});
// Invalid cases
test.each([
{ inputs: { age: 17, userType: "admin" }, description: 'Combination 4: Invalid case' },
{ inputs: { age: 121, userType: "user" }, description: 'Combination 5: Invalid case' },
{ inputs: { age: 50, userType: "superuser" }, description: 'Combination 6: Invalid case' },
{ inputs: { age: 50, userType: "root" }, description: 'Combination 7: Invalid case' },
{ inputs: { age: 50, userType: "" }, description: 'Combination 8: Invalid case' },
// ... more test cases
])('Invalid case: $description', ({ inputs }) => {
// TODO: Import the function or model to test
// import { UserRegistration } from './path/to/UserRegistration';
// TODO: Verify that an error occurs
// expect(() => UserRegistration(inputs)).toThrow();
// or
// const result = UserRegistration(inputs);
// expect(result.error).toBeDefined();
});
});
Principais Recursos
Cobertura Completa
- Todos os valores de classe de equivalência válidos e inválidos são incluídos nos casos de teste
- Os valores limite incluem: min-1, min, min+1, meio, max-1, max, max+1
- Para múltiplos intervalos, inclui valores de lacuna entre os intervalos
Combinações Eficientes
- 3 ou menos parâmetros: gera todas as combinações
- 4 ou mais parâmetros: usa o método de pares para eficiência
Suporte a Múltiplos Intervalos
Útil para:
- Horários de trabalho (9-12, 14-18)
- Pontuações válidas (0-40 aprovação, 60-100 honras)
- Faixas de temperatura (diferentes faixas válidas para diferentes condições)
- Slots de tempo (sessões da manhã, tarde, noite)
Exemplos
Consulte o diretório examples/ para mais exemplos de especificação:
user-registration.json- Validação básica de modelocalculate-discount.json- Lógica de negócios com múltiplos parâmetrosmulti-range-validation.json- Agendamento complexo com múltiplos intervalosjapanese-postal-code.json- Padrões de validação regional
Desenvolvimento
# Development mode
npm run dev
# Build
npm run build
# Production mode
npm start
# Debug mode
DEBUG=1 npm start
Publicação no npm
# Build and publish
npm publish
Contribuindo
- Faça um fork do repositório
- Crie sua branch de recurso (
git checkout -b feature/amazing-feature) - Faça commit das suas alterações (
git commit -m 'Add some amazing feature') - Envie para a branch (
git push origin feature/amazing-feature) - Abra um Pull Request
Licença
MIT - consulte LICENSE para detalhes
Suporte
- Issues do GitHub: [Relate bugs ou solicite recursos](/issues)
- Discussões: [Faça perguntas ou compartilhe ideias](/discussions)