Testes Unitários Profissionais no Delphi e C++Builder: Conheça o Dext Test Explorer e a Cobertura Integrada à IDE

Por Cesar Romero — 23 de outubro de 2026
Durante anos, escrever testes automatizados em Delphi foi uma experiência fragmentada. Não por falta de interesse dos desenvolvedores, mas porque o esforço necessário para colocar de pé uma esteira completa de qualidade sempre foi desproporcional.
Enquanto ecossistemas modernos como o .NET ou Java ofereciam de forma nativa e integrada suítes baseadas em atributos, asserções fluentes, frameworks maduros de mock, executores visuais rápidos e cobertura de código no próprio editor, no Delphi sempre enfrentamos uma realidade fragmentada. Tínhamos que lidar com peças isoladas: runners herdados com arquiteturas dos anos 2000, bibliotecas de mock mantidas à parte sem padronização de injeção ou ciclo de vida, e ferramentas de cobertura que funcionavam apenas externamente via linha de comando, gerando relatórios HTML estáticos que obrigavam o desenvolvedor a sair da IDE para caçar manualmente quais linhas de código não haviam sido executadas.
O resultado? Gastávamos mais tempo configurando bibliotecas, resolvendo incompatibilidades entre repositórios e escrevendo scripts de compilação do que realmente testando as regras de negócio que pagam as contas.
Passei quase sete anos trabalhando como arquiteto e engenheiro de software em grandes sistemas globais em .NET/C#. Lá, a experiência de testes é contínua e natural: você escreve o teste, abre o Test Explorer no Visual Studio, clica em rodar, visualiza a linha exata da falha e vê as linhas cobertas destacadas em tempo real na margem do editor.
Quando decidi trazer essa mesma maturidade para o Delphi no Dext Testing (parte do Dext Framework), a meta era clara: não criar mais um wrapper, mas entregar um ecossistema completo, profissional e coeso.
Depois de uma sprint intensa de desenvolvimento, o Dext Testing deu um salto maiúsculo. Neste artigo, compartilho o estado atual dessa solução, a chegada do suporte a C++Builder, o divisor de águas que é o Code Coverage integrado na IDE, e uma prévia exclusiva do meu próximo livro dedicado ao tema.
1. O Mapa: do que o .NET tem ao que o Dext Testing entrega
Seção intitulada “1. O Mapa: do que o .NET tem ao que o Dext Testing entrega”Não saímos agrupando utilitários desconexos. Mapeamos cada recurso que os desenvolvedores modernos tomam como padrão em outras plataformas e construímos seus equivalentes no Object Pascal:
| .NET / Visual Studio | Dext Testing | Maturidade | Papel no ecossistema |
|---|---|---|---|
| xUnit / NUnit (atributos) | Dext.Testing.Attributes | Estável | Testes baseados em atributos ([Fact], [Theory], [TestCase], lifecycle) |
| FluentAssertions | Dext.Assertions (Should) | Estável | Asserções semânticas legíveis e com mensagens explicativas |
| Moq / NSubstitute | Dext.Mocks | Estável | Mocking fluente com intercepção dinâmica em tempo de execução |
| Verify / Snapshots | MatchSnapshot | Estável | Testes de regressão visual e estrutural contra snapshots aprovados |
| WebApplicationFactory | TDextApplicationFactory | Estável | Testes de integração HTTP in-process sem subir servidor externo |
Coverlet / dotnet test | dext test --coverage | Estável | Execução em linha de comando com relatórios para CI/CD |
| JUnit / TRX / SonarQube | Dext.Testing.Report | Estável | Exportação nativa de relatórios de suíte e cobertura para Quality Gates |
| TestInsight / Adapters | Adapters DUnit / DUnitX / DUnit2 | Estável | Roda suítes existentes sem precisar reescrever fixtures |
| Visual Studio Test Explorer | Dext Test Explorer | Em evolução | Dockable Expert no RAD Studio com descoberta e execução assíncronas |
| Coverage no Editor (Gutter) | Coverage Gutter & Tab | Em evolução | Destaque visual direto na margem do código (coberto, não coberto, parcial) |
| C++ Test Explorer | Suporte C++Builder (GTest & DUnit) | Em evolução | Mesmo Expert executando projetos C++ e cobrindo Win64x |
2. Na IDE: O Dext Test Explorer
Seção intitulada “2. Na IDE: O Dext Test Explorer”A experiência do desenvolvedor acontece dentro do RAD Studio. O Dext Test Explorer é um dockable Expert (DLL carregada pela IDE) que descobre automaticamente as suítes de teste de projetos Delphi e C++Builder.

Principais características do Explorer:
- Execução Assíncrona: A IDE não congela. O projeto é compilado e executado em segundo plano, enviando eventos em tempo real via streaming local.
- Navegação com Duplo Clique: Quando um teste falha, a stack trace completa é exibida. Um duplo clique em qualquer frame abre imediatamente o arquivo-fonte na linha exata da falha.
- Filtros e Histórico: Filtre facilmente por testes aprovados, ignorados ou falhados, e acompanhe o histórico de duração de cada teste para detectar testes instáveis (flaky tests).
- Sem reescrita de código: Graças aos adaptadores embutidos, seus testes legados em DUnit, DUnitX ou DUnit2 rodam lado a lado com os testes modernos baseados no Dext.

Adoção Gradual: Você não precisa usar o resto do Dext (nem reescrever suas suítes)
Seção intitulada “Adoção Gradual: Você não precisa usar o resto do Dext (nem reescrever suas suítes)”Um ponto fundamental precisa ser esclarecido: o Dext Testing não exige que sua aplicação use o Dext Framework.
Embora o Dext Testing seja totalmente integrado e aproveite o ecossistema do framework quando presente (como injeção de dependência avançada e factories para testes de integração web), ele foi concebido com independência e modularidade:
- Para qualquer projeto existente: Você pode usar o Dext Testing para testar qualquer base de código Delphi tradicional — seja uma aplicação VCL clássica, serviços Windows, módulos de console ou código legado — sem adicionar nenhuma outra biblioteca ou dependência do Dext em produção.
- Adoção Modular em Partes: Você pode adotar apenas as ferramentas que agregam valor imediatamente ao seu fluxo atual. Deseja manter sua estrutura de testes existente, mas quer a expressividade e as mensagens didáticas das asserções fluentes
Should? Ou precisa apenas de mocks dinâmicos comDext.Mocks? Essas partes podem ser usadas de forma isolada. - O Test Explorer com DUnit, DUnitX e DUnit2: Se você já possui centenas ou milhares de testes escritos em frameworks consolidados, não é necessário reescrever uma única linha de teste para aproveitar a nova interface. Basta adicionar uma unit de integração (como
Dext.Testing.DUnitXouDext.Testing.DUnit) no arquivo de projeto.dprde testes. O Dext Test Explorer passa a reconhecer os testes existentes automaticamente, descobrindo as fixtures, compilando assincronamente e permitindo que você navegue pelos erros com duplo clique direto no editor.
3. O Grande Salto: Code Coverage Direto no Gutter do Editor
Seção intitulada “3. O Grande Salto: Code Coverage Direto no Gutter do Editor”Se há um recurso que muda radicalmente o dia a dia de quem programa com foco em qualidade, é o Code Coverage no Gutter da IDE.
Até então, medir cobertura de testes no Delphi exigia um processo cansativo:
- Compilar o projeto com MAP detalhado;
- Rodar uma ferramenta externa pela linha de comando;
- Esperar a geração de um relatório HTML em disco;
- Abrir o navegador, navegar por pastas e tentar identificar quais linhas de código ficaram vermelhas.
No Dext Test Explorer, essa fricção acabou.

Ao marcar a opção Collect coverage e executar a suíte:
- O Explorer orquestra a coleta de forma transparente;
- A aba Coverage exibe a porcentagem exata de linhas cobertas por unit e por método;
- O Editor de Código é pintado em tempo real:
- Verde: linha executada pelos testes;
- Vermelho: linha executável que não foi tocada pela suíte;
- Amarelo: desvio condicional ou ramo parcialmente executado.
Você não precisa adivinhar se aquele bloco except ou aquele case alternativo foi executado: basta olhar para o gutter enquanto você escreve ou refatora o código.
A Base Sólida: Reconhecendo o Delphi Code Coverage
Seção intitulada “A Base Sólida: Reconhecendo o Delphi Code Coverage”É importante registrar que o Dext não precisou reinventar a roda na análise de binários e leitura de mapas. Essa conquista se apoia diretamente no DelphiCodeCoverage, um projeto open-source consolidado, mantido pela comunidade, que funciona perfeitamente.
O Dext reconhece o valor inestimável dessa ferramenta e a adota como o motor de análise que faz essa engrenagem funcionar: o Dext obtém a versão adequada automaticamente (sem exigir nenhuma instalação manual ou configuração de caminhos no sistema), aciona o motor do DelphiCodeCoverage com base no .map detalhado gerado pelo compilador e consome os dados para pintar o gutter e alimentar a aba de estatísticas. É a união de um motor comprovado e robusto com uma experiência de uso nativa e produtiva dentro da IDE.
4. O C++Builder entra em cena: Um só Expert, duas linguagens
Seção intitulada “4. O C++Builder entra em cena: Um só Expert, duas linguagens”O RAD Studio é um ambiente de desenvolvimento dual, mas historicamente as ferramentas da comunidade focam quase exclusivamente em Delphi. Decidimos que o C++Builder merecia o mesmo nível de ferramental de testes modernos.

Na sprint recente, expandimos o Test Explorer para entender projetos .cbproj:
- Descoberta Nativa: Suporte tanto para suítes baseadas em Google Test (GTest) quanto em DUnit C++;
- Stack Trace Simbolizado: Resolução de pilha via arquivo
.mapdo ILINK, permitindo dar duplo clique na falha e abrir o arquivo.cppdiretamente na linha correta; - Exportação Universal: Geração automática de relatórios em formato JUnit, xUnit, JSON e SonarQube para pipelines de CI/CD.
O Desafio da Cobertura de Código no C++Builder
Seção intitulada “O Desafio da Cobertura de Código no C++Builder”Fazer a cobertura de código funcionar no C++ foi um capítulo técnico à parte. Diferente do Delphi, onde o linker grava tabelas detalhadas de linha no arquivo .map, o mapa gerado pelo C++Builder contém apenas símbolos e endereços.
Após uma análise aprofundada das opções de toolchains (inclusive trocando notas técnicas com a engenharia da própria Embarcadero):
- Para os toolchains clássicos e Win32 Clang (
bcc32,bcc32c,bcc64), a ausência de tabelas de linhas impede o mapeamento direto sem um profiler dedicado; - A solução definitiva veio com o Win64x Moderno (
bcc64x): o compilador moderno baseado em LLVM permite instrumentação de código em tempo de compilação (-fprofile-instr-generate -fcoverage-mapping). O teste gera um arquivo.profraw, que é processado viallvm-cov/ LCOV. O Dext Test Explorer consome esse LCOV e pinta exatamente o mesmo gutter colorido nos arquivos C++!

Se a plataforma ativa for Win64x, a cobertura de código funciona de forma integrada; caso contrário, a interface desabilita suavemente o recurso, garantindo que o desenvolvedor saiba exatamente o que sua plataforma suporta.
5. Prontos para CI/CD e Quality Gates
Seção intitulada “5. Prontos para CI/CD e Quality Gates”Desenvolvimento moderno não vive apenas na máquina local. O Dext Testing foi projetado desde o primeiro dia para se integrar a esteiras de integração contínua (GitHub Actions, GitLab CI, Azure Pipelines, Jenkins).
Tanto pela linha de comando através de dext test --coverage quanto pelo menu de exportação do Test Explorer, você gera automaticamente:
- JUnit XML / xUnit XML: consumido nativamente pelos dashboards de CI;
- TRX: padrão do Visual Studio e Azure DevOps;
- SonarQube XML (
dext_coverage.xml): alimentando os Quality Gates corporativos com índices de cobertura e testes; - HTML Report: para visualização rápida e compartilhamento em artefatos de build.
6. A Ferramenta é 50%. A Disciplina é a outra metade: Vem aí o novo livro
Seção intitulada “6. A Ferramenta é 50%. A Disciplina é a outra metade: Vem aí o novo livro”Ferramentas excelentes removem atritos, mas não impedem que desenvolvedores criem suítes frágeis, testes acoplados a detalhes de implementação ou classes inchadas e difíceis de testar.
Recentemente publiquei o livro Desenvolvimento Web Profissional com Delphi e Dext Framework (disponível em português e inglês), inaugurando uma série de publicações técnicas sobre a modernização do desenvolvimento em Delphi.
Agora, tenho o prazer de anunciar que o primeiro rascunho completo do segundo volume está finalizado:
Testes Unitários Profissionais com Delphi e Dext Framework
Seção intitulada “Testes Unitários Profissionais com Delphi e Dext Framework”Princípios, TDD, Isolamento e Suítes que Sobrevivem à Refatoração
(Edição em Inglês: Professional Unit Testing with Delphi and Dext Framework)
Este livro nasceu da experiência prática acumulada ao longo de mais de duas décadas em Delphi e anos no ecossistema .NET. Ele não se limita a explicar a sintaxe de uma biblioteca; ele ensina a arte e a engenharia de testar software em Object Pascal.
O livro é composto por 22 capítulos organizados em quatro partes progressivas, cada uma culminando em um laboratório prático:
Parte I — Mindset e o Primeiro Teste
Seção intitulada “Parte I — Mindset e o Primeiro Teste”Entenda o custo real do código sem testes e desmistifique o que é um teste unitário no ecossistema Pascal. Aprenda a estruturar testes usando o padrão AAA (Arrange-Act-Assert), crie nomes expressivos que documentam o sistema e domine asserções semânticas que ensinam quem lê o log.
- Laboratório 1: Construindo a primeira suíte de domínio sólida.
Parte II — Testes que Sobrevivem à Refatoração
Seção intitulada “Parte II — Testes que Sobrevivem à Refatoração”Por que tantos testes quebram quando o código é melhorado? Discutimos os quatro pilares de um bom teste, as diferenças fundamentais entre a Escola Clássica (Detroit) e a Escola de Mocking (Londres), anti-padrões comuns (test smells), e como gerenciar fixtures e dados de teste sem vazamentos de memória.
- Laboratório 2: Refatorando e blindando uma suíte frágil.
Parte III — TDD, Isolamento e Design Emergente
Seção intitulada “Parte III — TDD, Isolamento e Design Emergente”Aprenda TDD (Test-Driven Development) na prática através de exemplos reais. Descubra como o design arquitetural emerge dos testes, domine os cinco tipos de Test Doubles (Dummy, Stub, Spy, Mock, Fake) e explore o Dext.Mocks com verificação de chamadas, argumentos e auto-mocking com Injeção de Dependências.
- Laboratório 3: Um módulo de negócio nascido e guiado por testes.
Parte IV — Código Legado, Relatórios, Cobertura e o Dia a Dia
Seção intitulada “Parte IV — Código Legado, Relatórios, Cobertura e o Dia a Dia”O mundo real não é um projeto novo. Aprenda a encontrar pontos de costura (seams) em bases de código legado dos anos 2000, escreva testes de caracterização para garantir que comportamentos existentes não sejam alterados, integre o Dext Test Explorer e configure relatórios e métricas de cobertura no SonarQube para a sua esteira de produção.
- Laboratório 4: O projeto que você leva para a sua empresa na segunda-feira.
7. Transparência e Honestidade Técnica
Seção intitulada “7. Transparência e Honestidade Técnica”Assim como prezamos em todas as entregas do Dext Framework, é importante ser claro e transparente sobre o que está disponível hoje:
- O que é estável: O framework de testes em si (
Dext.Testing), asserçõesShould, mocks (Dext.Mocks), snapshots, adapters de DUnit/DUnitX, testes de integração web (TDextApplicationFactory) e o runner CLI com relatórios CI. - O que está em evolução: O Test Explorer como Expert na IDE e a integração visual de cobertura no Gutter continuam recebendo refinamentos contínuos de UX e estabilidade.
- C++Builder: A execução de testes e stack traces funcionam em Win32 e Win64x. A cobertura de código no gutter do C++ é suportada exclusivamente no compilador moderno Win64x via LLVM 20.
- Distribuição: O Expert é distribuído como código-fonte e scripts de compilação/instalação. Nosso objetivo futuro é disponibilizar pacotes prontos para instalação em 1 clique via GetIt para o RAD Studio.
8. Como Começar Hoje
Seção intitulada “8. Como Começar Hoje”Você já pode experimentar o Dext Testing, compilar o Test Explorer e utilizá-lo nos seus próprios projetos:
- Repositório Oficial: Acesse o projeto no GitHub em github.com/dotpas/dext.
- Instalação do Dext Framework: O framework está disponível através dos principais gerenciadores de pacotes:
- TMS Smart Setup
- DPM (Delphi Package Manager)
- Instalação do Dext Test Explorer: Para compilar e registrar o Expert no seu RAD Studio hoje, siga o guia passo a passo em Dext Test Explorer — Guia de Instalação.
- Em breve no GetIt: O Test Explorer estará disponível pré-compilado diretamente no GetIt Package Manager para instalação rápida em 1 clique — ideal principalmente para quem desenvolve exclusivamente em C++Builder e deseja apenas a experiência do Test Explorer sem a necessidade de instalar o Dext Framework completo.
- Exemplos Prontos: Confira os exemplos de suítes na pasta
Tests/Samples/, incluindo projetos para Delphi, DUnitX legado, e suítes DUnit e Google Test para C++Builder. - Fique Ligado no Livro: Os detalhes de pré-venda e capítulos de degustação de Testes Unitários Profissionais com Delphi e Dext Framework serão divulgados em breve no meu site oficial e redes sociais.
Testar software em Delphi não precisa mais ser um exercício de frustração ou uma coleção de ferramentas soltas. Com o Dext Testing, trazemos para a nossa comunidade a mesma produtividade, elegância e robustez que os melhores ecossistemas do mundo já desfrutam.
Tem dúvidas, sugestões ou quer compartilhar sua experiência? Abra uma issue ou inicie uma conversa nas discussões do repositório. Toda contribuição ajuda a fortalecer a cultura de engenharia e qualidade no ecossistema Delphi e C++Builder!