Mockly: .NET için HttpClient testlerinde akıcı HTTP mocking
Dennis Doomen, HttpClient kullanan kodu test etmeyi kolaylaştıran açık kaynak Mockly kütüphanesini tanıttı. Kütüphane, elle yazılan HttpMessageHandler alt sınıflarının ve Moq ile SendAsync üzerinde kurulan karmaşık taklitlerin yerini alıyor. Asıl değeri ise hata senaryolarını (retry, timeout, 401, 429) birkaç satırda test edebilmesi ve eşleşmeyen isteklerde net bir açıklama vermesi.
Kilit noktalar
- Kurulum: core paket mockly ve Fluent Assertions sürümüne göre FluentAssertions.Mockly.v8 veya v7
- HttpMock.GetClient(), GetClientFactory() ve GetMessageHandler() ile farklı HTTP istemci türleri test edilebilir
- ThenRespondsWithStatus() ile yanıt zinciri kurulur; son yanıt tekrar tekrar döner
- ThrowsException<HttpRequestException>() ile ağ hataları simüle edilir; istek yine kaydedilir
- RespondsWithRateLimit() ve RespondsWithUnauthorizedThenSuccess() ile Microsoft.Extensions.Http.Resilience gibi retry mekanizmaları test edilir
- FailOnUnexpectedCalls varsayılan olarak açık; eşleşmeyen istekler UnexpectedRequestException fırlatır
Mockly, .NET'te HttpClient'a bağımlı kodu test ederken kullanılan akıcı (fluent) bir HTTP mock kütüphanesi. Yazar, HttpMessageHandler alt sınıfı yazmak ya da SendAsync'i Moq ile taklit etmek yerine HttpMock nesnesi üzerinde beklenen istekleri tanımlamayı, ardından istemci, IHttpClientFactory ya da ham message handler almayı öneriyor. Metot, URL (joker karakterlerle), query, header, gövde ve form alanı gibi kriterlere göre eşleşme yapabiliyor.
Kütüphane ayrıca genellikle test edilmeyen hata durumlarına odaklanıyor: zincirlenmiş yanıtlarla retry senaryoları, Once() ve Times() ile çağrı sınırları, gecikmeli yanıtlarla timeout testleri ve ağ düzeyi istisnalar. Eşleşmeyen istekler varsayılan olarak hata fırlatır ve en yakın mock'un hangi kriterde uyuşmadığını gösterir. Assertion yardımcıları ayrı bir FluentAssertions.Mockly paketinde geliyor.
Gerçek dünyada kullanımı
- Bir ödeme veya CRM API'sini çağıran servis sınıfını, gerçek ağ çağrısı yapmadan birim testle doğrulamak
- Polly veya Microsoft.Extensions.Http.Resilience ile yazılmış retry ve circuit breaker politikalarını 503 ve 429 yanıtlarıyla test etmek
- OAuth token endpoint'i olan bir istemcide 401 sonrası token yenileme akışını doğrulamak
- Bir tarayıcıdan kopyalanan curl komutunu doğrudan test kurulumuna dönüştürmek
Neden önemli
HttpClient'a dayanan kodun hata yollarını (timeout, retry, yetkilendirme, throttling) test etmek artık birkaç satırlık iş olabilir. Eşleşmeyen isteklerde hatanın nedenini açıkça görmek de test başarısızlıklarını daha hızlı çözmenizi sağlar.
Benzer haberler
- .NET 8 ve 9 Destek Bitişi: Deployment Odaklı Geçiş Kontrol ListesiDEV Community: #dotnet2 gün önce
- Metalama 2027.0 ile metot çağrılarını build sırasında yönlendirmeMetalama / PostSharp Blog4 gün önce
- Bobcat ile çalıştırılabilir spesifikasyonlar nasıl yazılırJeremy D. Miller (The Shade Tree Developer)5 gün önce