Minimal API'de 404 testini HTTP sunucusu olmadan yaz
Yazar, bir minimal API endpoint'indeki 404 dalını test etmek için WebApplicationFactory yerine doğrudan handler çağrısı kullanmayı anlatıyor. Results<Ok<T>, NotFound> gibi typed result union'ları, dönüş tipini derleyici tarafından kontrol edilen bir sözleşmeye dönüştürüyor. Yaklaşım, hızlı ve okunabilir birim testleri sağlarken entegrasyon testlerinin hâlâ gerekli olduğunu da gösteriyor.
Kilit noktalar
- IResult dönen handler'lar içindeki durum kodunu dışarıdan okunamaz hâle getirir; bu yüzden test HTTP üzerinden yapılmak zorunda kalır.
- Results<Ok<Product>, NotFound> gibi typed union dönüş tipleri endpoint'in olası sonuçlarını imzada açıkça belirtir.
- TypedResults.Ok ve TypedResults.NotFound çağrıları Ok<T> ve NotFound türleri döndürür; bunlar doğrudan pattern matching ile test edilebilir.
- Route kaydı (app.MapGet(...)) handler metoduna referansla değişmeden çalışmaya devam eder.
- Birim testleri routing, model binding, serialization ve middleware davranışını kapsamaz; bunlar için entegrasyon testi gerekir.
- Union'a yeni bir sonuç tipi eklendiğinde derleyici, ilgili testleri de güncellemeniz için uyarır.
Bir ekip arkadaşının isteği üzerine yazar, ürün bulunamadığında 404 döndüren bir endpoint için test yazmaya başlar. İlk yaklaşım WebApplicationFactory ile tam bir sunucu başlatıp HTTP isteği göndermekti; ancak test yalnızca tek bir if dalını kontrol ediyordu. Çözüm, handler'ı adlandırılmış bir metoda çıkarıp dönüş tipini Results<Ok<Product>, NotFound> olarak tanımlamaktır. Böylece IResult gizlenmez, metot doğrudan çağrılabilir ve sonuç tipi pattern matching ile kontrol edilir.
Yazar bu sayede iki testi 15 milisaniyede çalıştırdığını, ancak routing, model binding, serialization ve middleware gibi katmanları birim testlerin kapsamadığını belirtiyor. Bu nedenle bağlantı katmanı için ince bir entegrasyon test seti tutulmasını öneriyor. Ayrıca union'a yeni bir dönüş tipi eklendiğinde derleyicinin testleri de güncellemeye yönlendirdiğini vurguluyor.
Gerçek dünyada kullanımı
- Kayıt veya ürün gibi kaynakların bulunamadığı durumları (404) hızlıca test eden bir minimal API projesi.
- Her endpoint için yalnızca iş mantığı dallarını kontrol eden hızlı bir xUnit test paketi, WebApplicationFactory kullanmadan.
- Endpoint'in OpenAPI çıktısının doğru yanıt tiplerini göstermesini isteyen ve dönüş tipini sözleşme gibi kullanan bir API ekibi.
Neden önemli
Dönüş tipini typed union olarak tanımlamak, hem testleri hem de OpenAPI metadatasını daha güvenilir hâle getirir. Handler dalları için WebApplicationFactory gerektirmeyen testler yazmak, test süresini ve bakım yükünü azaltır.