Test yapılandırmanız
TestDetta test koşularınızı daraltır. Hiçbir zaman genişletmez ya da değiştirmez: yapılandırmanızın dışladığı bir test dışlı kalır, kapsam haritaları da sizin ayarlarınızla kaydedilir.
TestDetta bir koşuya ne ekler
- Bir sınıf filtresi, yalnızca bazı test sınıfları koşacaksa: VSTest'te
--filter FullyQualifiedName~…, Microsoft.Testing.Platform altında xUnit v3 için--filter-class, TUnit için--treenode-filter. - Kayıt sırasında run settings: testler tek tek koşar, test AppDomain'i kullanılmaz ve kapsamı kaydeden toplayıcı yüklenir.
--ignore-exit-code 8, Microsoft.Testing.Platform altında kaydın hiç test bulamayabilecek kısmı için.
TestDetta neyi korur
Kendi haline bırakılırsa dotnet test bunların bazılarının sizin yapılandırmanızın yerine geçmesine izin verir. TestDetta ise ikisini birleştirir:
| Sizin yapılandırmanız | Tek başına dotnet test ne yapar | TestDetta ne yapar |
|---|---|---|
Proje dosyasında VSTestTestCaseFilter, örneğin Category!=Integration | Komut satırındaki bir --filter onun yerine geçer: dışlanan testler koşar | (sizin filtreniz)&(kendi sınıf filtresi) koşturur |
Kendi dotnet test argümanlarınızdaki --filter | Yalnızca tek bir --filter alır | (sizin filtreniz)&(kendi sınıf filtresi) koşturur |
Bir run settings dosyası (RunSettingsFilePath, VSTestSetting ya da sizin --settings'iniz): içindeki TestCaseFilter, EnvironmentVariables, TestRunParameters, veri toplayıcılar, zaman aşımları | Başka bir --settings dosyanın tamamının yerine geçer | Dosyanızın bir kopyasıyla kaydeder, yalnızca kendi öğelerini ekler; filtreniz, değişkenleriniz ve parametreleriniz kalır |
TestingPlatformCommandLineArguments (Microsoft.Testing.Platform), örneğin --filter-not-trait category=failing | Her koşuya uygular | Platforma bırakır ve sizin zaten bir kez verdiğiniz bir seçeneği tekrar etmez |
Seçilen bir proje tamamen koşuyorsa TestDetta filtre eklemez; yapılandırmanız tam olarak kendi koşularınızdaki gibi uygulanır.
CI argümanlarınızı TestDetta'ya verin
Kendi test işinizin kullandığı dotnet test argümanlarının aynısını, hem testler koşarken hem haritalar kaydedilirken verin:
td test --base origin/main -- --filter "Category!=Integration" --settings ci.runsettings
td record -- --filter "Category!=Integration" --settings ci.runsettings
GitHub Actions'ta bunu dotnet-test-args girdisi record modu da dahil her modda yapar. Kaydın kendisinin denetlediği seçenekler (-c, -f, --no-build, logger'lar, sonuç klasörü ve rapor seçenekleri) kayıt sırasında TestDetta'nın değerleriyle kalır; geri kalan her şey verdiğiniz gibi koşar.
td test argümanları arasındaki bir -f <tfm> seçimi de daraltır: koşu yalnızca o framework'ün derlemelerini yükler, bu yüzden yalnızca başka framework'ler için derlenen bir değişiklik (o framework'ün dışarıda bıraktığı bir #if altındaki kod) o koşuda hiçbir şey seçmez. Test projeleriniz birden fazla framework'ü hedefliyorsa her framework'ü bir yerde koşturun, örneğin gecelik tam bir koşuda; bkz. Sınırlamalar.
Bir filtre birleştirilemediğinde
Bazı filtreler bir sınıf filtresiyle birleştirilemez: sizin bir xUnit v3 sorgu filtreniz (--filter-query) ya da sınıf filtreniz ve bir TUnit tree-node filtresi. TestDetta o zaman test projesinin tamamını sizin filtrenizle koşturur: daha fazlasını koşturur, filtrenizin dışarıda bıraktığını asla. Job summary bunu o proje için belirtir.
Nelerin korunduğunu kontrol edin
Testler koşmadan önce konsol, kendi yapılandırması korunan her test projesini adıyla yazar; örneğin tests/Shop.Tests/Shop.Tests.csproj: your test case filter Category!=Integration, run settings tests/ci.runsettings kept in every run. Job summary de aynısını listeler, -v ise her koşunun tam dotnet test komutunu yazar.
Derlemeniz ya da CI'nız test argümanlarını burada sayılmayan bir yolla veriyorsa (bir Arcade özelliği, dotnet test'in etrafında bir betik), bunları dotnet-test-args ile ya da -- sonrasında verin; böylece TestDetta koşularınızın gerçekte ne yaptığını görür.