Başlarken

TestDetta branch'inizi base'iyle karşılaştırır, hangi test projelerinin ve hangi test sınıflarının değişikliği gözlemleyebileceğini belirler ve yalnızca onları çalıştırır. Emin olamadığında daha fazlasını çalıştırır, asla daha azını değil.

Gereksinimler

Hızlı başlangıç

GitHub Actions

GitHub Action TestDetta'yı sizin için derler; kurmanız gereken bir şey yok. Workflow'unuza iki adım ekleyin: biri varsayılan branch'inize yapılan push'larda bir kapsam haritası kaydeder, diğeri pull request'lerde yalnızca etkilenen testleri çalıştırır.

- 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

Workflow'un tamamı, gerektirdiği izinler ve tüm girdiler GitHub Actions sayfasında.

Diğer CI sistemleri

GitLab CI, Jenkins, Azure DevOps, Bitbucket ve şirket içi kurulumlar aynı iki komutu çalıştırır; commit başına kapsam haritalarını içeren bir klasör (--maps-dir) paylaşılan bir diskte ya da nesne depolamada tutulur. TestDetta'yı bir .NET aracı olarak kurun:

dotnet tool install --global <package>

Paket adı lansmanda belirlenecek. O zamana kadar aracı kaynaktan dotnet build src/TestDetta.Cli -c Release -o testdetta-bin ile derleyin ve td geçen her yerde dotnet testdetta-bin/TestDetta.Cli.dll çağırın.

Her sistem için pipeline'lar Diğer CI sistemleri sayfasında.

İlk komutlar

Bunları deponuzun içinde herhangi bir yerden çalıştırın. --base varsayılan olarak origin/main'dir.

# What does my branch affect, and why?
td affected --base origin/main

# Run only the affected tests (add --dry-run to print the dotnet test commands)
td test --base origin/main

# Run every test with coverage and write one map per test project to .testdetta/coverage
td record

Kapsam haritası olmadan da td test çalışır: yalnızca isimlere göre karar verir; bu güvenlidir ama daha fazlasını seçer. td record branch'inizin base'inde çalıştıktan sonra seçim isabetli hale gelir.

.testdetta/ klasörünü .gitignore dosyanıza ekleyin. Bu klasör kapsam haritalarını ve önbellekleri tutar; commit edilecek hiçbir şey içermez.

Komutlar

KomutNe yapar
td affected [--format text|json|paths|commands]Bir değişikliğin neleri etkilediğini ve nedenini yazdırır. --tests-only yalnızca etkilenen test projelerini listeler.
td test [--dry-run] [--summary-file <path>] [-- <dotnet test args>]Yalnızca etkilenen testleri çalıştırır. --summary-file bir Markdown özeti ekler, örneğin $GITHUB_STEP_SUMMARY dosyasına. -- sonrasındaki argümanlar her dotnet test çağrısına iletilir, örneğin -- -c Release.
td record [--project <csproj>]... [-c <configuration>] [-f <tfm>] [--parallel <n>] [--no-build]Tüm testleri kapsam ölçümüyle çalıştırır ve her test projesi için .testdetta/coverage altına bir harita yazar. --parallel her projenin test sınıflarını n test sürecine dağıtır; --no-build aynı yapılandırmayla yapılmış önceki bir derlemenin çıktısını kaydeder.
td license statusLisansı kontrol eder ve neyi kapsadığını gösterir.
td license install <license|file>Hiçbir CI secret'ının tutamayacağı makineler için lisansı ~/.testdetta/license dosyasına kaydeder.

Ortak seçenekler

SeçenekAnlamı
--base <ref>Karşılaştırılacak git ref'i. Varsayılan: origin/main.
--repo <path>Depo içindeki herhangi bir yol. Varsayılan: geçerli dizin.
--max-map-age <n>Merge base'den en fazla n commit önce kaydedilmiş kapsam haritalarını kullanır ve aradaki değişiklikleri köprüler. Varsayılan: 50; 0 yalnızca tam eşleşen haritaları kullanır. Bkz. Nasıl karar verir.
--maps-dir <dir>Depo dışında, commit başına bir klasör olarak tutulan kapsam haritaları: record oraya kaydeder, affected ve test ise --max-map-age sınırı içindeki en yenisini geri yükler. GitHub Actions dışındaki CI sistemleri için.
--drift-fallback <all|name>Daha eski bir haritadan bu yana yapılan değişiklikler bir derleme dosyası, yapılandırma ya da global using içerdiğinde: etkilenen test projelerini tamamen çalıştırır (all, varsayılan) ya da isimlere göre karar verir (name).
-v, --verboseDebug loglarını stderr'e yazar: kullanıcının sorgulayabileceği her karar, gerekçesiyle birlikte.
--log-level <level>trace, debug, information, warning (varsayılan), error ya da none.

Loglar stderr'e gider; stdout komutun çıktısını taşır ve makine tarafından okunabilir kalır.

Çıkış kodları

KodAnlamı
0Başarılı.
1Analiz başarısız oldu.
2Geçersiz komut satırı.
3Testler başarısız oldu.