MiniSpec
MiniSpec — Framework BDD para Delphi
🌍 Idioma: English | Español
Framework de Behavior-Driven Development (BDD) para Delphi — Escribe especificaciones ejecutables con sintaxis fluida estilo Gherkin (Given/When/Then). Una alternativa moderna a DUnit y DUnitX.
¿Por qué MiniSpec?
- 🎯 Sintaxis Gherkin nativa — Given/When/Then directamente en código Delphi
- 🔄 API fluida — Encadenamiento natural sin archivos
.featureexternos - 🧪 Type-safe — Autocompletado y verificación en tiempo de compilación
- 📊 Múltiples reporters — Consola, JSON, JUnit (CI/CD), Live Dashboard
- 🏷️ Filtrado potente — Por tags, features, scenarios, categorías
- 💉 Inyección de dependencias — Sistema ligero integrado
- 📦 Cero dependencias — Autónomo, solo copia la carpeta
Instalación
MiniSpec forma parte del DAF Project pero es completamente autónomo. No tiene dependencias de otros módulos de DAF.
Para usar MiniSpec: 1. Copia la carpeta src/MiniSpec a tu proyecto 2. Añade la carpeta al search path de Delphi 3. Añade uses Daf.MiniSpec a tus units de test
¡Eso es todo! No requiere configuración adicional.
Quick Start
unit Calculator.Add.Feat;
interface
implementation
uses Daf.MiniSpec, Calculator.Engine;
type
TWorld = class
Calculator: TCalculator; // System Under Test
A, B, Result: Integer; // Parámetros de Examples
end;
initialization
Feature('Calculator Addition @arithmetic')
.UseWorld<TWorld>
.Background
.Given('I have a calculator', procedure(W: TWorld)
begin
W.Calculator := TCalculator.Create;
end)
.ScenarioOutline('Adding <A> and <B> should be <Result>')
.Given('the numbers <A> and <B>') // Auto-binding desde Examples
.When('they are added', procedure(W: TWorld)
begin
W.Calculator.Add(W.A, W.B);
end)
.&Then('the result is <Result>', procedure(W: TWorld)
begin
Expect(W.Calculator.Result).ToEqual(W.Result);
end)
.Examples(
[['A', 'B', 'Result'],
[1, 1, 2],
[10, 20, 30],
[5, -2, 3]])
end.Ejecutar:
CalculatorSpecs.exe # Ejecutar todos los tests
CalculatorSpecs.exe -f "@arithmetic" # Solo tests con tag @arithmetic
CalculatorSpecs.exe -f "Feat:Calculator" # Filtrar por feature
CalculatorSpecs.exe -r live # Dashboard en tiempo real
CalculatorSpecs.exe -r junit:output=results.xml # Para CI/CDCaracterísticas Principales
| Característica | Descripción |
|---|---|
| Vocabulario Gherkin | Feature, Scenario, Given, When, Then, And, But, Background, Rule |
| Scenario Outline | Tests data-driven con tabla de Examples |
| DataTables | Datos estructurados inline en steps |
| Step Bindings | Pasos reutilizables con atributos regex |
| Before/After | Hooks a nivel de Feature |
| Tags & Filtros | @tag, Feat:, Scen:, Rule:, Cat: |
| Assertions | API Expect() completa con matchers |
| Test Doubles | API elegante Stub<T>, Mock<T>, SpyOn<T> |
| Reporters | Console, JSON, JUnit, Gherkin, Live Dashboard |
Documentación
| Recurso | Descripción |
|---|---|
| Guía de Usuario | Documentación completa de todas las características |
| Test Doubles | Stubs, Mocks y Spies |
| Patrones de Testing | BDD para tests unitarios, integración y E2E |
| Samples | Ejemplos funcionales |
| Changelog | Historial de cambios |
Reporters
| Reporter | Comando | Descripción |
|---|---|---|
| Console | -r console |
Salida colorida estilo Gherkin en terminal (default) |
| Live | -r live:port=8080 |
Dashboard interactivo en tiempo real via SSE |
| JUnit | -r junit:output=results.xml |
Compatible CI/CD (GitHub Actions, GitLab, Jenkins) |
| JSON | -r json:output=results.json |
Salida JSON estructurada |
| Gherkin | -r gherkin |
Formato texto Gherkin plano |
JUnit (CI/CD)
MisSpecs.exe -r junit:output=test-results.xmlCompatible con GitHub Actions, GitLab CI, Jenkins, Azure DevOps.
Múltiples Reporters
MisSpecs.exe -r console -r junit:output=results.xml -r json:output=report.jsonO configura vía MiniSpec.ini (se crea automáticamente en la primera ejecución):
[minispec]
reporters=console,junit
[reporter.junit]
output=results.xmlVer Reporters para detalles completos.
Requisitos
- Delphi 12 Athens o superior (requiere multi-line strings
''') - Windows (32/64 bit)
Licencia
Contribuir
¿Encontraste un bug? ¿Tienes una idea? Abre un issue o envía un PR.
Hecho con ❤️ para la comunidad Delphi
DAF Project — Delphi Application Framework