Mevcut xUnit.Net testlerini Bobcat'e taşımak
Critter Stack'in spesifikasyon aracı Bobcat, Marten'ın en kırılgan test suite'i olan DaemonTests projesine uygulandı: yüzlerce test, tek bir test gövdesi değiştirilmeden Given/When/Then adımları olarak raporlanıyor. Adımlar testlerin zaten çağırdığı helper'lardaki attribute'lardan, marker yorumlarından ve projekte edilen Shouldly assertion'larından geliyor.
Kilit noktalar
- Marten'ın DaemonTests projesi (393 test) test gövdeleri değiştirilmeden altı feature altında 30 spesifikasyon render ediyor; Bobcat 1.0.0 ve WolverineFx.Bobcat 6.55.0 kullanılıyor.
- [Given], [When], [Then], [Check] ve anahtar kelimesiz [Step] aynı StepAttribute'un farklı keyword'leri; placeholder'lar her çağrı noktasındaki parametrelere isimle bağlanıyor.
- Helper'ın olmadığı yerde Given, When, Then, And veya But ile başlayan // yorumu adım bildiriyor; dekore bir kod çalışmadıysa adım recorded değil declared işaretleniyor.
- <BobcatProjectAssertions>true</BobcatProjectAssertions> statement seviyesindeki Shouldly çağrılarını Then adımına çeviriyor ve serideki tüm assertion'ları test patlamadan değerlendiriyor.
- Ortak context üzerindeki protected helper'lar internal'a çevrilmek zorunda, çünkü üretilen interceptor'lar extension method; Bobcat bunu BOBCAT039 ile bildiriyor.
- Katılım sınıf bazında: catch_up_timeout_diagnostics, kayıtlı bir spesifikasyonun göstereceği hatayı beklediği için düz xUnit testi olarak kalıyor.
Critter Stack ekosisteminin test aracı Bobcat, Marten'ın async daemon testlerini barındıran DaemonTests projesine uyarlandı; bu suite uzun zamandır repodaki en güvenilmez test kaynağıydı. Test gövdelerinin hiçbiri değişmedi: Bobcat.Generators build sırasında dekore edilmiş her helper çağrısı için C# interceptor üretiyor, böylece ortak DaemonContext helper'ları üzerindeki [Given]/[When]/[Then] attribute'ları mevcut çağrıları kaydedilmiş adımlara dönüştürüyor. Adım cümlesindeki placeholder'lar parametrelere isimle bağlanıyor, Type argümanı ise kısa tip adıyla görünüyor.
Helper'ın bulunmadığı yerlerde Given, When, Then, And veya But ile başlayan // yorumları adım bildiriyor; o bölgede dekore bir kod çalışmadıysa adım süre almadan "declared" olarak işaretleniyor. <BobcatProjectAssertions>true</BobcatProjectAssertions> açıldığında statement seviyesindeki Shouldly çağrıları Then adımına dönüşüyor ve bir serideki tüm assertion'lar test patlamadan önce çalıştırılıyor. İki maliyet var: interceptor'lar extension method olmak zorunda olduğu için protected helper'lar internal'a çevrilmeli ve Bobcat.Xunit xunit.v3 4.x istiyor.
Gerçek dünyada kullanımı
- Arka planda daemon veya projection runner ayağa kaldıran yüzlerce testlik eski bir entegrasyon suite'ini, tek tek sınıf bazında ve yeniden yazmadan Bobcat'e geçirmek.
- Uzun bir hazırlıktan sonra birden fazla shard veya projection durumunu kontrol eden bir testte, tüm assertion hatalarını tek koşuda toplayarak tekrarlanan red/green döngülerinden kurtulmak.
- Hangi bekleme veya rebuild adımının sessizce kırılganlaştığını göstermek için CI raporunda adım bazlı süreler görmek.
- Hata davranışını bilinçli olarak doğrulayan ve kayıtlı spesifikasyona dönüşmemesi gereken sınıfları düz xUnit testi olarak bırakmak.
Neden önemli
Bobcat katılımın kademeli olabileceğini gösteriyor: mevcut bir suite'te helper metotları dekore etmek ve marker yorumları eklemek okunabilir, süreli adım raporları veriyor; projekte assertion'lar da ilk hatada durmak yerine tüm hataları tek döngüde ortaya çıkarıyor.