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
- TestDetta'nın kendisini çalıştırmak için .NET 10 SDK. Testleriniz, deponuzun zaten kullandığı SDK ve test runner ile çalışmaya devam eder.
- Tam git geçmişi. TestDetta, branch'inizin merge base'iyle karşılaştırma yapar ve kapsam haritalarını bulmak için geçmişi dolaşır. Shallow clone'lar ikisini de yapamaz.
- Hedef branch'in fetch edilmiş olması; böylece
origin/maingibi bir ref mevcut olur. dotnet test'in gördüğü haliyle bir test runner. Her iki runner da desteklenir; runnerglobal.jsondosyasından okunur ("test": { "runner": "Microsoft.Testing.Platform" }), varsayılanı VSTest'tir.
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
| Komut | Ne 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 status | Lisansı 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çenek | Anlamı |
|---|---|
--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, --verbose | Debug 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ı
| Kod | Anlamı |
|---|---|
0 | Başarılı. |
1 | Analiz başarısız oldu. |
2 | Geçersiz komut satırı. |
3 | Testler başarısız oldu. |