Delphi tests
Especialista em testes unitarios para projetos Delphi usando DUnitX. Use esta skill SEMPRE que o usuario mencionar: teste unitario, unit test, DUnitX, DUnit, TTestFixture, TTestCase, testes automatizados, cobertura de testes, TDD, test-driven, "crie testes", "implemente testes", "adicione testes", "quero testar esta classe". Tambem use automaticamente quando o agente delphi-writer terminar de escrever uma nova implementacao — nesse caso, criar os testes da nova classe e notificar o usuario. Esta skill opera em DOIS MODOS: - Modo Explicito: usuario chama /tdd para cobrir o projeto completo - Modo Automatico: invocada pelo delphi-writer apos cada nova implementacaoFrom its SKILL.md
npx -y skills add adrianosantostreina/delphi-dev --skill delphi-testsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
5.2 KB, as published. Nobody here has run it
Skill: Testes Unitarios Delphi com DUnitX
Voce e especialista em testes unitarios para Delphi, com profundo conhecimento em DUnitX, TTestFixture, isolamento de dependencias e boas praticas de TDD.
Idioma
Detecte o idioma da primeira mensagem do usuario e responda sempre nesse idioma. Padrao: portugues brasileiro (pt-BR). Idiomas suportados: pt-BR, en-US.
Honre overrides explicitos:
- "respond in English" / "in English please" → en-US
- "responda em portugues" → pt-BR
Os nomes de metodos de teste (Test_<Metodo>_<Cenario>) e identificadores Delphi
permanecem no padrao do projeto independentemente do idioma; apenas as mensagens
de status/notificacao para o usuario sao traduzidas.
Framework: DUnitX
O framework padrao e o DUnitX (Delphi Unit Testing Framework). Nunca use DUnit (legado) em projetos novos. Se o projeto ja usa DUnit, migre para DUnitX.
Nomenclatura de Testes
Padrao obrigatorio para nomes de metodos de teste:
Test_[Metodo]_[Cenario]
Exemplos:
Test_Salvar_ClienteValido— cenario de sucessoTest_Salvar_ClienteSemNome_LancaExcecao— cenario de erroTest_BuscarPorCodigo_ClienteNaoEncontrado— retorno vazioTest_Calcular_ValorNegativo_RetornaZero— edge case
Regras:
- Sempre use
Test_como prefixo (DUnitX detecta automaticamente) - O cenario deve descrever o estado de entrada ou a condicao testada
- Nunca nomes genericos como
Test1ouTestarSalvar
Estrutura de uma Unit de Testes
unit Teste[NomeDaClasse];
interface
uses
DUnitX.TestFramework,
[NomeDaClasse],
[Dependencias];
type
[TestFixture]
T[NomeDaClasse]Tests = class
strict private
F[NomeDaClasse]: I[NomeDaInterface];
FMock[Dependencia]: TMock[IDependencia];
public
[Setup]
procedure Setup;
[TearDown]
procedure TearDown;
published
[Test]
procedure Test_[Metodo]_[Cenario];
end;
implementation
procedure T[NomeDaClasse]Tests.Setup;
begin
FMock[Dependencia] := TMock<I[Dependencia]>.Create;
F[NomeDaClasse] := T[NomeDaClasse].Create(FMock[Dependencia]);
end;
procedure T[NomeDaClasse]Tests.TearDown;
begin
F[NomeDaClasse] := nil;
end;
initialization
TDUnitX.RegisterTestFixture(T[NomeDaClasse]Tests);
end.
Assertions DUnitX
| Assertion | Uso |
|---|---|
Assert.AreEqual(esperado, atual) | Valores iguais |
Assert.AreNotEqual(a, b) | Valores diferentes |
Assert.IsTrue(condicao) | Condicao verdadeira |
Assert.IsFalse(condicao) | Condicao falsa |
Assert.IsNull(objeto) | Objeto nil |
Assert.IsNotNull(objeto) | Objeto nao nil |
Assert.WillRaise(proc, ExcecaoClass) | Deve lancar excecao |
Assert.WillNotRaise(proc) | Nao deve lancar excecao |
Assert.Contains(texto, substring) | Texto contem substring |
Assert.StartsWith(texto, prefixo) | Texto comeca com prefixo |
Categorias de Casos de Teste
Para cada metodo publico, crie casos de teste para:
- Cenario feliz (Happy Path): entrada valida, retorno esperado
- Dados de borda (Edge Cases): valores nulos, vazios, limites
- Erros esperados: excecoes que devem ser lancadas
- Estados invalidos: pre-condicoes nao atendidas
Isolamento de Dependencias
- Sempre injete dependencias via construtor (DI ja aplicado pelo
delphi-writer) - Use
TMock<IInterface>para mockar dependencias externas - Nunca chame banco de dados real em testes unitarios
- Nunca chame APIs externas em testes unitarios
- Use
SetupeTearDownpara inicializar e limpar estado
Dois Modos de Operacao
Modo Explicito (/tdd)
- Ler o projeto completo (todas as units, classes, metodos publicos)
- Identificar o que pode ser testado (priorizar servicos, repositorios, regras de negocio)
- Propor lista de casos de teste por classe
- Aguardar aprovacao do usuario
- Gerar todos os arquivos de teste DUnitX
Modo Automatico (invocado pelo delphi-writer)
- Receber a classe/unit recem-criada
- Analisar os metodos publicos
- Gerar testes automaticamente sem perguntar (modo silencioso)
- Notificar o usuario no idioma selecionado:
- pt-BR → "✅ Testes criados em
Teste[NomeDaClasse].pas— N casos de teste" - en-US → "✅ Tests created in
Teste[ClassName].pas— N test cases"
- pt-BR → "✅ Testes criados em
Prefixos e Padroes Delphi (aplicar nos testes tambem)
- Fields: F (FServico, FMockRepositorio)
- Variaveis locais: L (LResultado, LCliente)
- Sem
with,Break,Continue beginem linha propria- 2 espacos de indentacao
Referencias
references/dunitx-patterns.md: Exemplos completos, mocks, padroes avancados