Yalnızca değişikliğinizin bozabileceği testleri çalıştırın.
TestDetta diff'inizi okur, onu projeler, semboller ve kaydedilmiş kapsam verisi üzerinden izler ve yalnızca değişikliği gözlemleyebilecek test sınıflarını çalıştırır. Emin olamadığında daha fazlasını çalıştırır, asla daha azını değil.
$ 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.# Spectre.Console'da gerçek bir değişiklik: koşunun tamamını görün
Demolarda değil, gerçek kodda ölçüldü
Popüler açık kaynak .NET kütüphanelerindeki üyeleri tek tek değiştiriyor ve başarısız olan her test sınıfının TestDetta tarafından seçilmiş olduğunu doğruluyoruz.
Tek bir üyedeki değişiklik, test sınıflarının medyan 28% kadarını çalıştırdı. Diff'ten job summary'ye gerçek bir koşuyu görün →
Nasıl karar verir
Her adım seçimi yalnızca kanıtı olduğunda daraltır. İzleyemediği her şeyde daha fazlasını çalıştırmaya geri döner.
Projeler
Değişen dosyalar projelere eşlenir ve ProjectReference'lar izlenir. Directory.Build.props gibi derlemenin geneline etki eden dosyalar altlarındaki her şeyi etkiler.
Semboller
C# söz dizimi ağaçları karşılaştırılır; böylece yorum ve boşluk değişiklikleri hiçbir şey seçmez ve TestDetta hangi üyelerin değiştiğini bilir.
Kapsam
Varsayılan branch'inizde kaydedilen bir kapsam haritası hangi test sınıfının hangi metodu çalıştırdığını söyler; böylece değişen metotlar kendi sınıflarını doğrudan seçer.
İsimler
Yeni kod, alanlar ve sabitler, test sınıflarına ya da haritanın bildiği koda ulaşana kadar kaynak kodda isimleriyle izlenir.
Geri dönüşler
Yapılandırma dosyaları, global using'ler, reflection ile keşfedilen tipler: bir değişiklik izlenemediğinde test projesinin tamamı çalışır.
Öz denetimler
Hiçbir testle eşleşmeyen bir filtre TestDetta içinde bir hata olarak ele alınır ve proje filtresiz olarak yeniden çalıştırılır.
GitHub Actions'ta iki adım
Varsayılan branch'inize yapılan her push'ta bir kapsam haritası kaydedin. Pull request'ler en yeni haritayı geri yükler ve yalnızca etkilenen testleri çalıştırır; job summary her sınıfın neden çalıştırıldığını ya da atlandığını açıklar.
GitHub Actions rehberi →
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 }}
Tek bir testin bile kaçmasını göze alamayan ekipler için
Kodunuz sizde kalır
TestDetta sizin CI'ınızda çalışır. Hiçbir kaynak kod, kapsam verisi ya da test sonucu makinelerinizden çıkmaz; committer e-postaları yalnızca yerel olarak sayılır.
Kullandığınız her framework
xUnit v2 ve v3, NUnit, MSTest ve TUnit; hem VSTest hem Microsoft.Testing.Platform altında, kendi paralelleştirmeleri dahil.
Hiçbir derlemeyi engellemez
Geçerli bir lisans yoksa eskisi gibi tüm testler çalışır. Bir lisans sorunu size CI süresine mal olur, asla kırmızı bir derlemeye değil.
Açık depolar için ücretsiz. Özel depolar için 30 gün ücretsiz.
Ardından aktif committer başına aylık $15. Deneme için kart gerekmez.