Ir al contenido

Pruebas Unitarias Profesionales en Delphi y C++Builder: Conoce Dext Test Explorer y la Cobertura Integrada en el IDE

Dext Test Explorer & Code Coverage

Por Cesar Romero — 23 de octubre de 2026

Durante años, escribir pruebas automatizadas en Delphi fue una experiencia fragmentada. No por falta de interés de los desarrolladores, sino porque el esfuerzo necesario para poner en marcha una canalización completa de calidad siempre fue desproporcionado.

Mientras ecosistemas modernos como .NET o Java ofrecían de forma nativa e integrada suites basadas en atributos, aserciones fluidas, frameworks maduros de mock, ejecutores visuales rápidos y cobertura de código en el propio editor, en Delphi siempre enfrentamos una realidad fragmentada. Teníamos que lidiar con piezas aisladas: ejecutores heredados con arquitecturas de los años 2000, librerías de mock mantenidas por separado sin estandarización de inyección o ciclo de vida, y herramientas de cobertura que funcionaban únicamente de forma externa mediante línea de comandos, generando informes HTML estáticos que obligaban al desarrollador a salir del IDE para rastrear manualmente qué líneas de código no habían sido ejecutadas.

¿El resultado? Gastábamos más tiempo configurando librerías, resolviendo incompatibilidades entre repositorios y escribiendo scripts de compilación que realmente probando las reglas de negocio que pagan las cuentas.

Pasé casi siete años trabajando como arquitecto e ingeniero de software en grandes sistemas globales en .NET/C#. Allí, la experiencia de pruebas es continua y natural: escribes la prueba, abres el Test Explorer en Visual Studio, haces clic en ejecutar, visualizas la línea exacta del fallo y ves las líneas cubiertas destacadas en tiempo real en el margen del editor.

Cuando decidí llevar esa misma madurez a Delphi en Dext Testing (parte de Dext Framework), la meta era clara: no crear un simple wrapper más, sino entregar un ecosistema completo, profesional y cohesivo.

Tras un intenso sprint de desarrollo, Dext Testing ha dado un salto decisivo. En este artículo, comparto el estado actual de esta solución, la llegada del soporte a C++Builder, el punto de inflexión que representa el Code Coverage integrado en el IDE, y un adelanto exclusivo de mi próximo libro dedicado a este tema.


1. El Mapa: De lo que .NET tiene a lo que Dext Testing ofrece

Sección titulada «1. El Mapa: De lo que .NET tiene a lo que Dext Testing ofrece»

No nos dedicamos a juntar utilidades desconectadas. Mapeamos cada característica que los desarrolladores modernos dan por sentada en otras plataformas y construimos sus equivalentes en Object Pascal:

.NET / Visual StudioDext TestingMadurezRol en el ecosistema
xUnit / NUnit (atributos)Dext.Testing.AttributesEstablePruebas basadas en atributos ([Fact], [Theory], [TestCase], ciclo de vida)
FluentAssertionsDext.Assertions (Should)EstableAserciones semánticas legibles y con mensajes explicativos
Moq / NSubstituteDext.MocksEstableMocking fluido con intercepción dinámica en tiempo de ejecución
Verify / SnapshotsMatchSnapshotEstablePruebas de regresión visual y estructural frente a snapshots aprobados
WebApplicationFactoryTDextApplicationFactoryEstablePruebas de integración HTTP in-process sin levantar servidor externo
Coverlet / dotnet testdext test --coverageEstableEjecución por línea de comandos con reportes para CI/CD
JUnit / TRX / SonarQubeDext.Testing.ReportEstableExportación nativa de reportes de suite y cobertura para Quality Gates
TestInsight / AdaptersAdaptadores DUnit / DUnitX / DUnit2EstableEjecuta suites existentes sin necesidad de reescribir fixtures
Visual Studio Test ExplorerDext Test ExplorerEn evoluciónDockable Expert en RAD Studio con descubrimiento y ejecución asíncronos
Coverage en el Editor (Gutter)Coverage Gutter & TabEn evoluciónResaltado visual directo en el margen del código (cubierto, no cubierto, parcial)
C++ Test ExplorerSoporte C++Builder (GTest y DUnit)En evoluciónMismo Expert ejecutando proyectos C++ y cubriendo Win64x

La experiencia del desarrollador ocurre dentro de RAD Studio. El Dext Test Explorer es un Expert acoplable (DLL cargada por el IDE) que descubre automáticamente las suites de pruebas de proyectos Delphi y C++Builder.

Dext Test Explorer acoplado en el IDE de RAD Studio

Principales características del Explorer:

  1. Ejecución Asíncrona: El IDE no se congela. El proyecto se compila y ejecuta en segundo plano, enviando eventos en tiempo real mediante streaming local.
  2. Navegación con Doble Clic: Cuando una prueba falla, se muestra el stack trace completo. Un doble clic en cualquier frame abre inmediatamente el archivo fuente en la línea exacta del fallo.
  3. Filtros e Historial: Filtra fácilmente por pruebas aprobadas, ignoradas o fallidas, y sigue el historial de duración de cada prueba para detectar pruebas inestables (flaky tests).
  4. Sin reescritura de código: Gracias a los adaptadores integrados, tus pruebas heredadas en DUnit, DUnitX o DUnit2 se ejecutan en paralelo con las pruebas modernas basadas en Dext.

Acciones y filtros en Dext Test Explorer

Adopción Gradual: No necesitas usar el resto de Dext (ni reescribir tus suites)

Sección titulada «Adopción Gradual: No necesitas usar el resto de Dext (ni reescribir tus suites)»

Un punto fundamental que debe quedar claro: Dext Testing no exige que tu aplicación utilice Dext Framework.

Aunque Dext Testing está totalmente integrado y aprovecha el ecosistema del framework cuando está presente (como la inyección de dependencias avanzada y fábricas para pruebas de integración web), fue concebido con independencia y modularidad:

  • Para cualquier proyecto existente: Puedes usar Dext Testing para probar cualquier base de código Delphi tradicional —ya sea una aplicación VCL clásica, servicios de Windows, módulos de consola o código heredado— sin añadir ninguna otra librería o dependencia de Dext en producción.
  • Adopción Modular por Partes: Puedes adoptar únicamente las herramientas que aporten valor inmediato a tu flujo actual. ¿Deseas mantener tu estructura de pruebas existente, pero quieres la expresividad y los diagnósticos claros de las aserciones fluidas Should? ¿O solo necesitas mocks dinámicos con Dext.Mocks? Estas partes pueden utilizarse de forma totalmente aislada.
  • Test Explorer con DUnit, DUnitX y DUnit2: Si ya tienes cientos o miles de pruebas escritas en frameworks consolidados, no es necesario reescribir una sola línea de prueba para disfrutar de la nueva interfaz. Basta con añadir una unidad de integración (como Dext.Testing.DUnitX o Dext.Testing.DUnit) en el archivo de proyecto .dpr de pruebas. Dext Test Explorer reconocerá las pruebas existentes automáticamente, descubriendo las fixtures, compilando asíncronamente y permitiéndote navegar por los errores con doble clic directo en el editor.

3. El Gran Salto: Code Coverage Directo en el Gutter del Editor

Sección titulada «3. El Gran Salto: Code Coverage Directo en el Gutter del Editor»

Si hay una funcionalidad que cambia radicalmente el día a día de quien programa con foco en la calidad, es el Code Coverage en el Gutter del IDE.

Hasta ahora, medir la cobertura de pruebas en Delphi requería un proceso tedioso:

  1. Compilar el proyecto con MAP detallado;
  2. Ejecutar una herramienta externa por línea de comandos;
  3. Esperar la generación de un reporte HTML en disco;
  4. Abrir el navegador, navegar por carpetas e intentar identificar qué líneas de código quedaron en rojo.

En Dext Test Explorer, esa fricción desapareció por completo.

Code Coverage integrado con resaltado en el Gutter y panel de estadísticas

Al marcar la opción Collect coverage y ejecutar la suite:

  • El Explorer orquesta la recolección de forma transparente;
  • La pestaña Coverage muestra el porcentaje exacto de líneas cubiertas por unidad y por método;
  • El Editor de Código se colorea en tiempo real:
    • Verde: línea ejecutada por las pruebas;
    • Rojo: línea ejecutable que no fue alcanzada por la suite;
    • Amarillo: desvío condicional o rama ejecutada parcialmente.

Ya no necesitas adivinar si aquel bloque except o aquel case alternativo fue ejecutado: basta con mirar el gutter mientras escribes o refactorizas código.

La Base Sólida: Reconociendo a Delphi Code Coverage

Sección titulada «La Base Sólida: Reconociendo a Delphi Code Coverage»

Es fundamental señalar que Dext no necesitó reinventar la rueda en el análisis de binarios y lectura de mapas. Este logro se apoya directamente en DelphiCodeCoverage, un proyecto open-source consolidado, mantenido por la comunidad, que funciona a la perfección.

Dext reconoce el inmenso valor de esta herramienta y la adopta como el motor de análisis que impulsa este flujo: Dext obtiene la versión adecuada automáticamente (sin requerir ninguna instalación manual ni configuración de rutas en el sistema), activa el motor de DelphiCodeCoverage basándose en el .map detallado generado por el compilador y procesa los datos para pintar el gutter y alimentar la pestaña de estadísticas. Es la unión de un motor probado y robusto con una experiencia de uso nativa y productiva dentro del IDE.


4. C++Builder entra en escena: Un solo Expert, dos lenguajes

Sección titulada «4. C++Builder entra en escena: Un solo Expert, dos lenguajes»

RAD Studio es un entorno de desarrollo dual, pero históricamente las herramientas comunitarias se han enfocado casi exclusivamente en Delphi. Decidimos que C++Builder merecía exactamente el mismo nivel de herramientas de pruebas modernas.

Dext Test Explorer ejecutando suite Google Test en C++Builder

En el sprint reciente, expandimos Test Explorer para interpretar proyectos .cbproj:

  • Descubrimiento Nativo: Soporte tanto para suites basadas en Google Test (GTest) como en DUnit C++;
  • Stack Trace Simbolizado: Resolución de pila mediante archivo .map de ILINK, permitiendo hacer doble clic en el fallo y abrir el archivo .cpp directamente en la línea correcta;
  • Exportación Universal: Generación automática de reportes en formato JUnit, xUnit, JSON y SonarQube para pipelines de CI/CD.

El Desafío de la Cobertura de Código en C++Builder

Sección titulada «El Desafío de la Cobertura de Código en C++Builder»

Hacer que la cobertura de código funcionara en C++ fue un capítulo técnico aparte. A diferencia de Delphi, donde el linker escribe tablas detalladas de líneas en el archivo .map, el mapa generado por C++Builder solo contiene símbolos y direcciones de memoria.

Tras un análisis en profundidad de las opciones de toolchains (incluyendo intercambio de notas técnicas con la ingeniería de la propia Embarcadero):

  • Para los toolchains clásicos y Win32 Clang (bcc32, bcc32c, bcc64), la ausencia de tablas de líneas impide el mapeo directo sin un profiler dedicado;
  • La solución definitiva llegó con el Win64x Moderno (bcc64x): el compilador moderno basado en LLVM permite instrumentación de código en tiempo de compilación (-fprofile-instr-generate -fcoverage-mapping). La prueba genera un archivo .profraw, que se procesa mediante llvm-cov / LCOV. ¡Dext Test Explorer consume ese LCOV y pinta exactamente el mismo gutter coloreado en los archivos C++!

Pestaña de Code Coverage y estadísticas en C++Builder para Win64x

Si la plataforma activa es Win64x, la cobertura de código funciona de manera transparente; de lo contrario, la interfaz deshabilita suavemente la funcionalidad, asegurando que el desarrollador sepa con claridad lo que su plataforma soporta.


El desarrollo de software moderno no depende únicamente de la máquina local. Dext Testing fue diseñado desde el primer día para integrarse en pipelines de integración continua (GitHub Actions, GitLab CI, Azure Pipelines, Jenkins).

Tanto desde la línea de comandos mediante dext test --coverage como desde el menú de exportación de Test Explorer, puedes generar automáticamente:

  • JUnit XML / xUnit XML: consumido nativamente por los paneles de CI;
  • TRX: estándar de Visual Studio y Azure DevOps;
  • SonarQube XML (dext_coverage.xml): alimentando los Quality Gates corporativos con métricas de cobertura y pruebas;
  • HTML Report: para visualización rápida y consulta en artefactos de compilación.

6. La Herramienta es el 50%. La Disciplina es la otra mitad: Próximamente el nuevo libro

Sección titulada «6. La Herramienta es el 50%. La Disciplina es la otra mitad: Próximamente el nuevo libro»

Las grandes herramientas eliminan fricciones, pero no impiden que los desarrolladores creen suites frágiles, pruebas acopladas a detalles de implementación o arquitecturas sobrecargadas y difíciles de probar.

Recientemente publiqué el libro Desarrollo Web Profesional con Delphi y Dext Framework (disponible en portugués e inglés), inaugurando una serie de publicaciones técnicas sobre la modernización del desarrollo en Delphi.

Ahora, tengo el placer de anunciar que el primer borrador completo del segundo volumen está finalizado:

Pruebas Unitarias Profesionales con Delphi y Dext Framework

Sección titulada «Pruebas Unitarias Profesionales con Delphi y Dext Framework»

Principios, TDD, Aislamiento y Suites que Sobreviven a la Refactorización
(Edición en Inglés: Professional Unit Testing with Delphi and Dext Framework)

Este libro nace de la experiencia práctica acumulada durante más de dos décadas en Delphi junto a años de trabajo en el ecosistema .NET. No se limita a explicar la sintaxis de una librería; enseña el arte y la ingeniería de probar software en Object Pascal.

El libro está compuesto por 22 capítulos organizados en cuatro partes progresivas, cada una culminando en un laboratorio práctico:

Comprende el coste real del código sin pruebas y desmitifica qué es una prueba unitaria en el ecosistema Pascal. Aprende a estructurar pruebas usando el patrón AAA (Arrange-Act-Assert), crea nombres expresivos que documentan el sistema y domina aserciones semánticas que explican claramente el motivo del fallo.

  • Laboratorio 1: Construyendo la primera suite de dominio sólida.

Parte II — Pruebas que Sobreviven a la Refactorización

Sección titulada «Parte II — Pruebas que Sobreviven a la Refactorización»

¿Por qué fallan tantas pruebas cuando se mejora el código? Discutimos los cuatro pilares de una buena prueba, las diferencias fundamentales entre la Escuela Clásica (Detroit) y la Escuela de Mocking (Londres), anti-patrones comunes (test smells), y cómo gestionar fixtures y datos de prueba sin fugas de memoria.

  • Laboratorio 2: Refactorizando y blindando una suite frágil.

Parte III — TDD, Aislamiento y Diseño Emergente

Sección titulada «Parte III — TDD, Aislamiento y Diseño Emergente»

Aprende TDD (Test-Driven Development) en la práctica a través de escenarios reales. Descubre cómo el diseño arquitectónico emerge de las pruebas, domina los cinco tipos de Test Doubles (Dummy, Stub, Spy, Mock, Fake) y explora Dext.Mocks con verificación de llamadas, argumentos y auto-mocking con Inyección de Dependencias.

  • Laboratorio 3: Un módulo de negocio nacido y guiado por pruebas.

Parte IV — Código Heredado, Reportes, Cobertura y el Día a Día

Sección titulada «Parte IV — Código Heredado, Reportes, Cobertura y el Día a Día»

El mundo real rara vez es un proyecto desde cero. Aprende a encontrar puntos de costura (seams) en bases de código heredado de los años 2000, escribe pruebas de caracterización para asegurar que los comportamientos existentes no se alteren, integra Dext Test Explorer y configura reportes y métricas de cobertura en SonarQube para tu canalización de producción.

  • Laboratorio 4: El proyecto que llevas a tu empresa el lunes por la mañana.

Al igual que en todas las entregas de Dext Framework, es fundamental ser claros y transparentes sobre lo que está disponible hoy:

  • Lo que es estable: El framework de pruebas en sí (Dext.Testing), aserciones Should, mocks (Dext.Mocks), snapshots, adaptadores de DUnit/DUnitX, pruebas de integración web (TDextApplicationFactory) y el runner de CLI con reportes para CI.
  • Lo que está en evolución: Test Explorer como Expert en el IDE y la integración visual de cobertura en el Gutter continúan recibiendo mejoras constantes de UX y estabilidad.
  • C++Builder: La ejecución de pruebas y stack traces funcionan en Win32 e Win64x. La cobertura de código en el gutter de C++ está soportada exclusivamente en el compilador moderno Win64x mediante LLVM 20.
  • Distribución: El Expert se distribuye como código fuente y scripts de compilación/instalación. Nuestro objetivo futuro es publicar paquetes listos para instalación en 1 clic a través de GetIt para RAD Studio.

Ya puedes probar Dext Testing, compilar Test Explorer y utilizarlo en tus propios proyectos:

  1. Repositorio Oficial: Accede al proyecto en GitHub en github.com/dotpas/dext.
  2. Instalación de Dext Framework: El framework está disponible a través de los principales gestores de paquetes:
    • TMS Smart Setup
    • DPM (Delphi Package Manager)
  3. Instalación de Dext Test Explorer: Para compilar y registrar el Expert en tu RAD Studio hoy, sigue la guía paso a paso en Dext Test Explorer — Guía de Instalación.
    • Próximamente en GetIt: Test Explorer estará disponible precompilado directamente en el GetIt Package Manager para instalación rápida en 1 clic — ideal especialmente para quienes desarrollan exclusivamente en C++Builder y desean únicamente la experiencia de Test Explorer sin necesidad de instalar todo Dext Framework.
  4. Ejemplos Listos: Explora los ejemplos de suites en la carpeta Tests/Samples/, incluyendo proyectos para Delphi, DUnitX heredado, y suites DUnit y Google Test para C++Builder.
  5. Mantente al tanto del Libro: Los detalles de preventa y capítulos de muestra de Pruebas Unitarias Profesionales con Delphi y Dext Framework se anunciarán próximamente en mi sitio web oficial y redes sociales.

Probar software en Delphi y C++Builder ya no tiene que ser un ejercicio de frustración ni una colección de herramientas inconexas. Con Dext Testing, traemos a nuestra comunidad la misma productividad, elegancia y robustez que los mejores ecosistemas del mundo ya disfrutan.


¿Tienes dudas, sugerencias o quieres compartir tu experiencia? Abre una issue o inicia una conversación en las discusiones del repositorio. ¡Cada aporte ayuda a fortalecer la cultura de ingeniería y calidad en el ecosistema Delphi y C++Builder!