Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Test Edilebilir Tasarım: Dependency Injection, Seam'ler, Functional Core ve Humble Object
Kodu test edilebilir yapan şey kararları saf bir çekirdeğe çekip zamanı, I/O'yu ve çerçeve kodunu ince bir kabukta bırakmaktır; o zaman kararlar mock'suz test edilir. DateTime.Now kullanan bir indirim testi takvime bağlı kaldı ve İstanbul ile UTC farkını gizledi. Seam türleri, TimeProvider, functional core / imperative shell, Humble Object ile BackgroundService ve legacy kod için characterization test.
Unit Test'te Zor Durumlar: Async Kod, Zaman, Exception'lar, Logging ve Background Service'ler
FakeTimeProvider ile test edilen kodda kural şudur: işlemi başlat, saati ilerlet, sonra bekle; önce await edilen retry testi saat hiç ilerlemediği için 2 saniyelik timeout'a takıldı. Backoff'u saf fonksiyon olarak, retry akışını fake saatle, exception'ı tip ve veriyle, critical log'u FakeLogger ile, cancellation'ı ve Channel<T> tüketen BackgroundService'i deterministik testlerle doğrulamak.