Sınırlamalar

TestDetta bir şeyi göremediği yerde daha fazlasını seçer. Bu sayfa o yerleri listeler; böylece bir seçimin gerekenden ne zaman daha geniş olduğunu ve elle yazılmış bir kalıbın bir testi gizleyebildiği birkaç durumu bilirsiniz.

Test framework'leri ve runner'lar

Her iki dotnet test runner'ı da desteklenir. Runner global.json dosyasından okunur ("test": { "runner": "Microsoft.Testing.Platform" }; .NET 10 SDK üzerinde xUnit v3 için gereklidir).

Her test projesi, kendisinin bulunduğu ya da üstündeki en yakın global.json dosyasının dizininde derlenir ve çalıştırılır; böylece solution'ın yanında tutulan bir dosya (src/global.json), orada çalışan bir geliştirici için nasıl geçerliyse öyle hesaba katılır. --dry-run bu tür komutları (cd src && dotnet test ...) şeklinde yazdırır.

Kayıt ve seçim; xUnit v2 (VSTest), xUnit v3 ve TUnit (Microsoft.Testing.Platform) ile, MSTest ve NUnit ile ise her iki runner altında, framework'ün kendi paralelleştirmesini açan projeler dahil uçtan uca test edilmiştir.

Kayıt sırasında başarısız olan testler

Kayıt sırasında başarısız olan test sınıfları, projeleri etkilendiğinde her zaman seçilir: başarısız bir test erken durur, dolayısıyla kapsam verisi eksiktir.

Testler başarısız olduğunda ve hangilerinin başarısız olduğunu söyleyen bir TRX raporu bulunmadığında (Microsoft.Testing.Extensions.TrxReport olmadan Microsoft.Testing.Platform altında NUnit), harita kullanılmaz ve seçim isimlere geri döner.

Süreç başına bir kez çalışan kod

Önbellekler, lazy singleton'lar ve EF model oluşturma, test süreci başına bir kez çalışır ve onları tetikleyen ilk test sınıfına yazılır. Static constructor içinde ya da önbellek dolduran bir çağrıda (ConcurrentDictionary.GetOrAdd, Lazy<T>.Value, LazyInitializer, ConditionalWeakTable, IMemoryCache.GetOrCreate) çalışmış koddaki değişiklikler ve her kayıt sürecinde yalnızca tek bir test sınıfının çalıştırdığı constructor'lar ile static üyelerdeki değişiklikler bunun yerine isimle izlenir.

TryGetValue ile kontrol edilen bir Dictionary gibi elle yazılmış bir önbellek, kullanıcılarını yine de gizleyebilir. Varsayılan branch'te tüm test paketini çalıştırmaya devam edin; kayıt bunu zaten yapar.

Proje dosyaları

Proje dosyaları; referanslar, derlenen ve gömülü öğeler, assembly adları ve hedef framework'ler için varsayılan yapılandırmada ve restore yapılmadan MSBuild ile değerlendirilir (tek bir dotnet msbuild çağrısı, .testdetta/cache içinde önbelleğe alınır).

Kodun gösteremedikleri

TestDetta kaynak kodunuzu, proje dosyalarınızı ve kayıt sırasında testlerinizin neleri çalıştırdığını görür. Şunları göremez:

Paket sürümü değişiklikleri görülür: Directory.Packages.props içindeki bir PackageVersion değişikliği paketi referans alan projeleri çalıştırır, bir PackageReference değişikliği ise proje dosyasında yapılmış bir değişikliktir.

Önişlemci sembolleri

C# dosyaları her hedef framework'ün gerçek önişlemci sembolleriyle, ayrıca hiç sembol olmadan ve #if'lerinin andığı tüm sembollerle ayrıştırılır; böylece herhangi bir etkin koşul altındaki kod görülür.

Atlanan testler

Bir harita kaydedilirken atlanan testlerin kapsam verisi yoktur. Tüm testleri atlanmış bir sınıf, çalışabileceği başka bir platformda seçilir, kaydın yapıldığı platformda ise atlanır. Docker daemon'ının bulunmaması gibi başka nedenlerle atlanan testler, ancak testlerin çalıştığı yerde kayıt yapılarak kapsanır.

Source generator'lar

Source generator'ların yazdığı kod kaynak ağacında bulunmaz. td record bu kodu kaydedilen assembly'lerin PDB'lerinden (portable ya da embedded) okur ve andığı isimleri haritada tutar; böylece isim izleme, üretilmiş çağıranları görür. Portable PDB olmadan derlenmiş assembly'ler hiçbir şey sağlamaz.

F# ve Visual Basic

F# ve Visual Basic projeleri proje grafiğinin bir parçasıdır, ancak kodları analiz edilmez: bunlardan biri etkilendiğinde, ona bağımlı her şey tamamen çalışır.