Este sistema utiliza o agente do StackSpot para gerar automaticamente testes unitários para arquivos Swift de qualquer projeto iOS.
stktest/
├── createtests.py # Script principal para gerar testes
├── helpers.py # Funções auxiliares (autenticação, requests, etc.)
├── agent_prompt.md # Prompt detalhado para o agente do StackSpot
└── README.md # Este arquivo
cd stktest
# Criar ambiente virtual (apenas na primeira vez)
python3 -m venv venv
# Ativar ambiente virtual e instalar dependências
source venv/bin/activate
pip install -r requirements.txtOu use o script de ativação:
./activate.sh- Acesse o painel do StackSpot
- Configure o agente com o prompt contido em
agent_prompt.md - Anote as credenciais (client_id, client_secret e agent_id)
# Copie o template de ambiente
cp env_template.txt .env
# Edite o arquivo .env com suas credenciais reais
nano .envPreencha as seguintes variáveis no arquivo .env:
# Configurações do Projeto
PROJECT_NAME=MeuProjeto
SOURCES_PATH=../src
TESTS_PATH=./tests
MAX_FILES_PER_RUN=3
# Credenciais do StackSpot
STACKSPOT_CLIENT_ID=seu_client_id_aqui
STACKSPOT_CLIENT_SECRET=seu_client_secret_aqui
STACKSPOT_AGENT_ID=seu_agent_id_aqui# Ativar ambiente virtual (se não estiver ativo)
source venv/bin/activate
# Executar o script
python3 createtests.py- Analisa apenas classes: Filtra arquivos que contêm classes (não protocolos, enums ou structs simples)
- Verifica arquivos existentes: Não sobrescreve testes que já existem
- Estrutura de pastas: Mantém a mesma estrutura de pastas do código fonte
- Geração de mocks: Cria mocks necessários para dependências externas
- Estatísticas detalhadas: Mostra relatório completo do processo
- Não cria testes para protocolos
- Não cria testes para enums simples
- Não cria testes para structs sem lógica de negócio
- Não sobrescreve arquivos de teste existentes
- Não cria testes para arquivos do sistema (AppDelegate, SceneDelegate, etc.)
Iniciando análise de arquivos Swift...
⏭️ Pulando arquivo: AppDelegate.swift (arquivo do sistema)
⏭️ Pulando arquivo: Category.swift (não contém classes)
🧪 Criando arquivo de teste para: ./projeto/Network/Network.swift
📄 Arquivo de mock criado: ./tests/mocks/Network/MockNetworkClient.swift
✅ Arquivo de teste criado: ./tests/Network/NetworkTests.swift
⏭️ Teste já existe para: UserService.swift
==================================================
📊 RESUMO DO PROCESSO:
📁 Total de arquivos Swift analisados: 25
🏗️ Arquivos com classes encontrados: 12
✅ Testes criados: 8
⏭️ Testes pulados (já existiam): 4
==================================================
🎉 Processo concluído!
- ✅ Arquivo .env: Credenciais são carregadas de variáveis de ambiente
- ✅ Gitignore: Arquivo .env não é commitado no repositório
- ✅ Template: Use
env_template.txtcomo base para criar seu .env - ✅ Validação: Script verifica se as variáveis estão configuradas
STACKSPOT_CLIENT_ID: ID do cliente StackSpotSTACKSPOT_CLIENT_SECRET: Chave secreta do clienteSTACKSPOT_AGENT_ID: ID do agente configurado
Para usar proxy corporativo, edite helpers.py:
USE_PROXY = True # Altera de False para TrueO sistema automaticamente obterá as credenciais do keychain do macOS.
Para adicionar mais arquivos que devem ser ignorados, edite a função should_skip_file() em createtests.py:
skip_files = [
'AppDelegate.swift',
'SceneDelegate.swift',
'Info.plist',
'SeuArquivo.swift' # Adicione aqui
]Os testes seguem as melhores práticas do iOS/Swift:
- Framework: XCTest
- Estrutura: setUp/tearDown
- Nomenclatura:
testMethodName_WhenCondition_ShouldReturnExpectedResult - Mocks: Protocol-based mocking
- Cobertura: Métodos públicos, cenários de sucesso/falha, edge cases
- Verifique se as credenciais do StackSpot estão corretas
- Confirme se o agente está ativo no painel
- O agente pode retornar resposta inválida
- Verifique o prompt configurado no StackSpot
- Execute novamente para arquivos específicos
- Verifique se o caminho
sources_pathestá correto - Confirme se a pasta de código fonte existe
- Python 3.6+
- macOS (para keychain, se usar proxy)
- Acesso ao StackSpot
requests>=2.28.0- Para requisições HTTPkeyring>=23.0.0- Para gerenciamento de credenciaispandas>=1.5.0- Para processamento de dadosopenpyxl>=3.0.0- Para leitura de arquivos Excel
Todos os pacotes são instalados automaticamente com:
pip install -r requirements.txtPara melhorar o sistema:
- Adicione novos padrões de detecção de classes
- Melhore o prompt do agente
- Adicione mais validações
- Implemente testes para o próprio sistema