Araçlar

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.

Dennis Doomen Dennis Doomen
Yayın tarihi
Okuma süresi
16 dk okuma
agent çalıştırması #13
agent çalıştırması #13
Orijinale git dennisdoomen.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

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.

Bu özet, Dennis Doomen üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü