Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
76 yazı bulundu
Red-Green-Refactor Uygulamada: Fake It, Triangulation, Obvious Implementation ve Baby Step'ler
Test ve Kalite SERİ 02

Red-Green-Refactor Uygulamada: Fake It, Triangulation, Obvious Implementation ve Baby Step'ler

Kırmızı testi yeşile çevirmenin üç yolu var: kodu biliyorsan obvious implementation, bilmiyorsan fake it, tasarım belirsizse triangulation; seni şaşırtan her kırmızıda adımı küçültürsün. CouponValidator'ı xUnit v3 ile canlı geliştirirken banker's rounding sürprizini, eski testleri kıran bir fake'i, hemen yeşil olan testi bozarak doğrulamayı, TimeProvider ile İstanbul saatine göre son kullanma kuralını ve her yeşilde küçük commit ritmini gerçek çıktılarla görüyoruz.

14 Kas 2026 12 dk 19
TDD Nedir? Canon TDD, Test List ve Red-Green-Refactor'ın Asıl Amacı
Test ve Kalite SERİ 01

TDD Nedir? Canon TDD, Test List ve Red-Green-Refactor'ın Asıl Amacı

TDD çok unit test yazmak değil, davranışı küçük adımlarla büyütürken tasarımı sürekli düzeltme disiplinidir: önce test list, sonra listeden tek test, kırmızı, yeşil, isteğe bağlı refactor ve listeyi güncellemek. Kent Beck'in Canon TDD tarifini, Uncle Bob'un three laws anlatımıyla farkını ve Bookstore'un CouponValidator'ı için listenin iki döngüde nasıl değiştiğini gerçek test çıktılarıyla görüyoruz.

14 Kas 2026 13 dk 13
Eski Integration ve E2E Testlerini Okumak: WebApplicationFactory .NET 6'dan 11'e, Testcontainers 3'ten 4'e, Protractor'dan Playwright'a
Test ve Kalite SERİ 09

Eski Integration ve E2E Testlerini Okumak: WebApplicationFactory .NET 6'dan 11'e, Testcontainers 3'ten 4'e, Protractor'dan Playwright'a

Eski bir integration testini okurken ilk soru, factory'nin hangi uygulamayı ayağa kaldırdığıdır: Startup tabanlı bir factory .NET 10'da derlenip Bookstore'u hiç çalıştırmadan 404 döndürebilir. WebApplicationFactory'nin .NET 6'dan 11'e değişimini, .NET 11'in ConfigureWebApplicationBuilder hook'unu, Testcontainers 4 değişikliklerini, Protractor'dan geçişi ve Playwright 1.58–1.65'teki breaking change'leri gerçek derleme ve koşularla anlatıyoruz.

14 Kas 2026 11 dk 14
Flaky E2E Testleri: İzolasyon, Paralellik, Retry, Network Mocking ve Görsel Karşılaştırma
Test ve Kalite SERİ 08

Flaky E2E Testleri: İzolasyon, Paralellik, Retry, Network Mocking ve Görsel Karşılaştırma

Flaky bir E2E testi çoğu zaman uygulamadaki gerçek bir belirsizliği gösterir: Bookstore'daki arama testi, geç gelen bir HTTP cevabının sonucu ezdiği bir yarış durumunu yakalıyordu. Paylaşılan veri, saat dilimi, page.clock, worker ve sharding, retry'ın gizlediği hatalar, page.route'un meşru kullanımları, toHaveScreenshot'ta platform farkı ve axe ile accessibility kontrolünü gerçek koşularla anlatıyoruz.

14 Kas 2026 14 dk 14
Bookstore'u Uçtan Uca Test Etmek: API, Angular ve Veritabanını Birlikte Ayağa Kaldırmak
Test ve Kalite SERİ 07

Bookstore'u Uçtan Uca Test Etmek: API, Angular ve Veritabanını Birlikte Ayağa Kaldırmak

Playwright'ın webServer'ı iki process başlatır: SQL Server container'ını açıp API'yi WebApplicationFactory.UseKestrel ile gerçek portta çalıştıran bir .NET host'u ve ng serve. Host'taki üç sürprizi, login'i setup project ve storageState ile bir kez yapmayı, test verisini API'den hazırlamayı, page object ile fixture'ı birlikte kullanmayı ve UseKestrel'in WithWebHostBuilder'la portu yok saymasını gerçek koşularla gösteriyoruz.

14 Kas 2026 16 dk 11
Playwright'a Giriş: Playwright Test mi Playwright for .NET mi, Locator'lar, Auto-wait ve Trace Viewer
Test ve Kalite SERİ 06

Playwright'a Giriş: Playwright Test mi Playwright for .NET mi, Locator'lar, Auto-wait ve Trace Viewer

Playwright action'dan önce element'i bekler ama action'ın sonucunu beklemez; sonucu expect(locator) ile kurulan web-first assertion'lara bırak. .NET + Angular ekibi için Playwright Test ile Microsoft.Playwright'ı karşılaştırıyor, getByRole ve getByLabel ile kullanıcı gözüyle locator yazmayı, strict mode'u, codegen'i ve kalan bir testi trace viewer ile okumayı gerçek koşularla gösteriyoruz.

14 Kas 2026 14 dk 13
Angular ile API Arasındaki Contract: OpenAPI Dokümanı, Breaking Change Tespiti ve Ne Zaman Pact?
Test ve Kalite SERİ 05

Angular ile API Arasındaki Contract: OpenAPI Dokümanı, Breaking Change Tespiti ve Ne Zaman Pact?

Angular ile API arasındaki sözleşmeyi build'de üretilip commit'lenen OpenAPI 3.1 dokümanı taşır; CI'da oasdiff breaking change'i, dokümandan üretilen TypeScript tipleri ve tsc de kullanılan alanların kırılmasını yakalar. Dokümanın sayıları neden 'integer ya da string' gösterdiğini, enum, nullable ve required tuzaklarını, breaking change sınıflandırmasını ve Pact'in ne zaman gerektiğini gerçek çıktılarla anlatıyoruz.

14 Kas 2026 11 dk 11
Dış Bağımlılıkları Sınırda Taklit Etmek: WireMock.Net, Sahte SMTP, FakeTimeProvider ve Hata Senaryoları
Test ve Kalite SERİ 04

Dış Bağımlılıkları Sınırda Taklit Etmek: WireMock.Net, Sahte SMTP, FakeTimeProvider ve Hata Senaryoları

Dış servisleri kendi client'ını mock'layarak değil, HTTP ve SMTP sınırında taklit et: WireMock.Net ödeme ve kargo API'si, Mailpit e-posta, FakeTimeProvider zaman için. Giden isteği doğrulamayı, retry, timeout ve circuit breaker'ın gerçekten devreye girdiğini, yavaş bir sağlayıcıda POST retry'ının dört ödemeye yol açtığını ve global sahte saatin Polly'yi dondurduğunu gerçek koşularla gösteriyoruz.

14 Kas 2026 11 dk 9
Testcontainers ile Gerçek SQL Server: Container Yaşam Döngüsü, Migration ve Testler Arası Temizlik
Test ve Kalite SERİ 03

Testcontainers ile Gerçek SQL Server: Container Yaşam Döngüsü, Migration ve Testler Arası Temizlik

SQL Server container'ını assembly başına bir kez başlat, test class'ı başına ayrı veritabanı aç, şemayı EnsureCreated ile değil migration'larla kur ve her testten önce Respawn ile temizle. Transaction rollback, test başına veritabanı ve paylaşılan veritabanında Respawn'ı aynı on testle ölçüyor; PreserveExecutionContext olmadan rollback'in sessizce çalışmadığını ve container reuse'un gerçek bedelini gösteriyoruz.

14 Kas 2026 12 dk 10
WebApplicationFactory Derinlemesine: Custom Factory, ConfigureTestServices, Configuration ve Test Authentication
Test ve Kalite SERİ 02

WebApplicationFactory Derinlemesine: Custom Factory, ConfigureTestServices, Configuration ve Test Authentication

Test configuration'ını UseSetting veya CreateHost ile ver; ConfigureAppConfiguration'la verilen değer Program.cs'in Build öncesinde okuduğu yere ulaşmaz. Custom factory'de service değiştirmeyi, header tabanlı test authentication handler'ıyla 401 ve 403'ü ayırmayı, redirect ve ProblemDetails helper'larını, WithWebHostBuilder'ın gerçek maliyetini ve testte istemeden çalışan background service'leri ölçümlerle gösteriyoruz.

14 Kas 2026 13 dk 10
.NET 10'da Integration Test Altyapısı: Neyi Gerçek, Neyi Sahte Çalıştırıyoruz?
Test ve Kalite SERİ 01

.NET 10'da Integration Test Altyapısı: Neyi Gerçek, Neyi Sahte Çalıştırıyoruz?

Bu serideki integration test, API'yi test process'inde production pipeline'ıyla, veritabanını gerçek SQL Server container'ıyla çalıştırır; yalnız ödeme, kargo ve e-posta gibi dış servisler sınırda taklit edilir. SQLite ve InMemory'nin collation, uzunluk, precision ve transaction farklarını gerçek koşuyla gösteriyor, xUnit v3 + Testcontainers iskeletini kurup unit testlerden ayırıyoruz.

14 Kas 2026 15 dk 13
xUnit v2'den v3'e ve 4.0'a: Eski Test Projelerini Okumak ve Taşımak
Test ve Kalite SERİ 13

xUnit v2'den v3'e ve 4.0'a: Eski Test Projelerini Okumak ve Taşımak

xUnit v2 projesini v3'e taşımak paketleri tek pakete indirmek, projeyi executable yapmak ve birkaç imzayı değiştirmektir; 4.0'a geçişte asıl risk ise derlenen ama davranışı değişen extensibility kodu. 3.x'te yazılmış bir ITestCaseOrderer 4.0.2'de uyarısız derlendi ve method sıralamasını sessizce bıraktı. Gerçek derleme hatalarıyla adım adım taşıma, dotnet new xunit'in hâlâ v2 üretmesi, xunit-console-tool ve bir checklist.

8 Kas 2026 9 dk 46
Blog Haritası