Ejecuta solo las pruebas que tu cambio puede romper.
TestDetta lee tu diff, lo sigue a través de proyectos, símbolos y cobertura registrada, y ejecuta solo las clases de prueba que pueden observarlo. Cuando no puede estar seguro, ejecuta más, nunca menos.
$ td test --base main -- -f net10.0td: 1 changed file(s), 1 affected test project(s).Tests to run: filtered src/Spectre.Console.Tests/Spectre.Console.Tests.csproj (14 of 141 test class(es) run or reference the changed code, 0.6 s of 3.0 s (80% saved))Recorded test time: 0.6 s of 3.4 s (83% saved).Passed! - Failed: 0, Passed: 156, Total: 156 - Spectre.Console.Tests.dlltd summary: passed src/Spectre.Console.Tests/Spectre.Console.Tests.csproj (14 class(es), 4.6 s)1 project(s) run, 0 failed, 0 skipped.# un cambio real en Spectre.Console: ver la ejecución completa
Medido en código real, no en demos
Cambiamos miembros de bibliotecas .NET de código abierto populares, uno a uno, y comprobamos que cada clase de prueba que falla sea una que TestDetta seleccionó.
Un cambio en un solo miembro ejecutó una mediana del 28% de las clases de prueba. Mira una ejecución real, del diff al job summary →
Cómo decide
Cada paso reduce la selección solo cuando tiene pruebas de ello. Todo lo que no puede rastrear recurre a ejecutar más.
Proyectos
Los archivos modificados se asignan a proyectos y siguen sus ProjectReference. Los archivos que afectan a toda la compilación, como Directory.Build.props, afectan a todo lo que está por debajo de ellos.
Símbolos
Se comparan los árboles de sintaxis de C#, así que los cambios en comentarios y espacios en blanco no seleccionan nada, y TestDetta sabe qué miembros cambiaron.
Cobertura
Un mapa registrado en tu rama predeterminada indica qué clase de prueba ejecutó qué método, así que los métodos modificados seleccionan sus clases directamente.
Nombres
El código nuevo, los campos y las constantes se rastrean por nombre a través del código fuente hasta llegar a clases de prueba o a código que el mapa conoce.
Alternativas seguras
Archivos de configuración, global usings, tipos descubiertos por reflexión: cuando un cambio no se puede rastrear, se ejecuta el proyecto de pruebas completo.
Autocomprobaciones
Un filtro que no coincide con ninguna prueba se trata como un error de TestDetta, y el proyecto se vuelve a ejecutar sin él.
Dos pasos en GitHub Actions
Registra un mapa de cobertura en cada push a tu rama predeterminada. Las pull requests restauran el mapa más reciente y ejecutan solo las pruebas afectadas, con un job summary que explica por qué se ejecutó u omitió cada clase.
Guía de GitHub Actions →
GitLab CI, Jenkins, Azure DevOps, Bitbucket →
- if: github.event_name == 'push'
uses: <owner>/testdetta@<sha>
with:
mode: record
- if: github.event_name == 'pull_request'
uses: <owner>/testdetta@<sha>
with:
mode: test
license: ${{ secrets.TESTDETTA_LICENSE }}
Hecho para equipos que no pueden permitirse pasar por alto una prueba
Tu código se queda contigo
TestDetta se ejecuta dentro de tu CI. Ni el código fuente, ni la cobertura, ni los resultados de las pruebas salen de tus máquinas; los correos de los autores de commits solo se cuentan localmente.
Todos los frameworks que usas
xUnit v2 y v3, NUnit, MSTest y TUnit, tanto con VSTest como con Microsoft.Testing.Platform, incluida su propia paralelización.
Nunca bloquea una compilación
Sin una licencia válida se ejecutan todas las pruebas, como antes. Un problema de licencia cuesta tiempo de CI, nunca una compilación en rojo.
Gratis para repositorios públicos. 30 días gratis para los privados.
Después, $15 por committer activo al mes. Sin tarjeta para la prueba.