agentleFS
adrianosantostreinaadrianosantostreina/delphi-dev/skills/delphi-tests/SKILL.md

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

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
  1. Very specific:

    Use TMock<IInterface> para mockar dependencias externas

    line 130
  2. Very specific:

    Use Setup e TearDown para inicializar e limpar estado

    line 133

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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 sucesso
  • Test_Salvar_ClienteSemNome_LancaExcecao — cenario de erro
  • Test_BuscarPorCodigo_ClienteNaoEncontrado — retorno vazio
  • Test_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 Test1 ou TestarSalvar

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

AssertionUso
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:

  1. Cenario feliz (Happy Path): entrada valida, retorno esperado
  2. Dados de borda (Edge Cases): valores nulos, vazios, limites
  3. Erros esperados: excecoes que devem ser lancadas
  4. 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 Setup e TearDown para inicializar e limpar estado

Dois Modos de Operacao

Modo Explicito (/tdd)

  1. Ler o projeto completo (todas as units, classes, metodos publicos)
  2. Identificar o que pode ser testado (priorizar servicos, repositorios, regras de negocio)
  3. Propor lista de casos de teste por classe
  4. Aguardar aprovacao do usuario
  5. Gerar todos os arquivos de teste DUnitX

Modo Automatico (invocado pelo delphi-writer)

  1. Receber a classe/unit recem-criada
  2. Analisar os metodos publicos
  3. Gerar testes automaticamente sem perguntar (modo silencioso)
  4. 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"

Prefixos e Padroes Delphi (aplicar nos testes tambem)

  • Fields: F (FServico, FMockRepositorio)
  • Variaveis locais: L (LResultado, LCliente)
  • Sem with, Break, Continue
  • begin em linha propria
  • 2 espacos de indentacao

Referencias

  • references/dunitx-patterns.md: Exemplos completos, mocks, padroes avancados

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.