.NET için test etki analizi

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.

41açık kaynak depo; her birinin kendi test framework'ü, test runner'ı ve derleme tuhaflıkları var
2,941en az bir testi bozan değişiklik
3 kaçırma, hepsi düzeltildiher kaçırma için düzeltme olmadan başarısız olan bir test yazılır ve ilgili depo temiz çıkana kadar yeniden çalıştırılır

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.

1

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.

2

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.

3

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.

4

İ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.

5

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.

6

Ö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.