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).
- Yalnızca bir paketin props dosyalarının eklediği ya da yalnızca bir
Releasekoşulunun eklediği öğeler görülmez. - MSBuild'in değerlendiremediği bir proje, import'ları gibi XML olarak okunur.
- Bir proje klasörünün içinde olup projenin derlemediği değişen bir dosya, o projede yapılmış bir değişiklik sayılır. Hiçbir proje klasörünün içinde olmayan bir dosya hiçbir şey seçmez; bkz. yok sayılan dosyalar.
- Test projeleri ayrıca
*.Testsya da*.Testadından da tanı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:
- Harici servisler ve veritabanları. Başka bir sistemdeki değişiklik, örneğin başka bir yerde uygulanan bir şema migration'ı ya da testlerinizin çağırdığı bir API, burada hiçbir şey seçmez.
- Çalışma zamanında proje klasörlerinin dışından okunan dosyalar, örneğin depo kökündeki paylaşılan test verileri. Bunları test projesinin içinde tutun; bkz. yok sayılan dosyalar.
- Ortam: çalıştırmalar arasında farklılık gösteren değişkenler, makine ayarları ve kurulu araçlar.
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.