delphi-tests
Skill87 starsChanged 5 months agoMITView on GitHub
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 implementacao
In this repository15 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- delphi-acbrSkill
- delphi-asyncSkill
- delphi-buildSkill
- delphi-claudeignoreSkill
- delphi-e2eSkill
- delphi-encodingSkill
- delphi-firedacSkill
- delphi-fmxSkill
- delphi-laudoSkill
- delphi-legacySkill
- delphi-specSkill
- delphi-spring4dSkill
- delphi-standardsSkill
- delphi-writeSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 130
Use TMock<IInterface> para mockar dependencias externas
- Very specific: line 133
Use Setup e TearDown para inicializar e limpar estado
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

