Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
xUnit Test Yaşam Döngüsü: Constructor, IAsyncLifetime, Fixture'lar ve 4.0'da Tam Paralellik
xUnit her test için test class'ının yeni bir instance'ını oluşturur; pahalı ve salt okunur hazırlık class, collection ya da assembly fixture'ında bir kez yapılır. 4.0'ın ParallelMode.All'u 8 testlik örnekte süreyi 1,06 saniyeden 0,55'e indirdi, ama static bir fake paylaşan iki test 20 koşunun 16'sında kaldı. IAsyncLifetime, opt-out seviyeleri, ITestOutputHelper ve TestContext ekleri.
xUnit v3'te Veri Odaklı Testler: Theory, MemberData, TheoryData, TheoryDataRow ve MatrixTheoryData
Veri odaklı testte satır sayısından çok satır seçimi önemlidir: sınır değerleri ve equivalence partitioning, Math.Round'un banker's rounding hatasını iki satırla yakaladı. xUnit v3'te InlineData, MemberData ve tip güvenli TheoryData, satır bazında display name, label, trait ve skip taşıyan TheoryDataRow, MatrixTheoryData, dinamik skip, Explicit testler ve serileştirilemeyen verinin Test Explorer'a etkisi.
İyi Bir Unit Test'in Anatomisi: AAA, İsimlendirme, Tek Davranış ve Okunabilir Assertion'lar
İyi bir unit test tek bir davranışı tek bir Act ile çalıştırır, dallanma içermez ve kırmızıya döndüğünde adı ve hata mesajıyla sorunu kodu açmadan anlatır. AAA'nın sınırları, Method_Scenario_Expected ile düz cümle isimlendirme, Assert.Multiple, Shouldly, AwesomeAssertions ve FluentAssertions 8'in Xceed lisansı gerçek hata mesajlarıyla.
xUnit v3 ile Test Projesi: Microsoft Testing Platform, dotnet test ve İlk Testler
xUnit.net v3 test projesi bir executable'dır ve 4.0 ile varsayılan olarak Microsoft Testing Platform v2 üzerinde çalışır; .NET 10 SDK'da global.json'a test runner ayarı eklenince dotnet test VSTest projelerini reddeder. xunit3 template'i, paket zinciri, dotnet test ve dotnet run, Assert.Throws/ThrowsAsync, TestContext.Current.CancellationToken ile xUnit1051, filtreler, TRX raporu ve exit code 8.
Unit Test'te "Unit" Ne Demek? Classical ve London School, İyi Testin Dört Özelliği
Unit, bir method ya da class değil bir davranıştır; test double'ı yalnız sistem sınırında kullanan classical school, her collaborator'ı mock'layan London school'dan daha refactoring'e dayanıklı testler üretir. Solitary ve sociable test ayrımı, Khorikov'un iyi testin dört özelliği ve davranışı aynı bırakan bir değişikliğin mock'lu testi nasıl kırdığı gerçek çıktıyla.
Code Coverage Ne Söyler, Ne Söylemez: Line, Branch Coverage ve Mutation Testing
Code coverage yalnız hangi kodun çalıştığını söyler, testlerin bir şey doğrulayıp doğrulamadığını söylemez: hiç assertion içermeyen bir test yüzde 87,5 line ve yüzde 100 branch coverage verdi, Stryker.NET ile mutation score'u yüzde 6,67 çıktı. MTP coverage extension'ı, ReportGenerator ve Angular'da coverage, sınır değerlerini bulan survived mutant'lar, --since ile yalnız değişen koda mutation testing ve coverage eşiği tuzakları.
Neyi Hangi Seviyede Test Etmeli? Davranış, Sınırlar ve Mock'lanacak Bağımlılıklar
Domain mantığı yoğun unit test, orchestration kodu az sayıda integration test alır; trivial kod test edilmez, aşırı karmaşık kod önce refactor edilir. Testte kendi veritabanın (managed) gerçek, ödeme ve e-posta gibi unmanaged bağımlılıklar mock olur. Davranışı değişmeyen bir refactoring'de kırılan mock'lu testin gerçek çıktısı, risk tabanlı önceliklendirme ve tek sayfalık test stratejisi dokümanı.
Test Pyramid, Testing Trophy ve Honeycomb: Hangi Şekil Hangi Sisteme Uyar?
Doğru şekil, sistemde güveni en ucuza hangi test seviyesinin verdiğine bağlıdır: domain mantığı yoğun bir API pyramid'e, ince bir CRUD API ile Angular SPA trophy'ye, microservice'ler contract testlerle honeycomb'a yakışır. InMemory provider'la yeşil yanıp gerçek SQLite'ta 500 dönen bir arama sorgusu, static katmanın 0,8 saniyede yakaladığı bir tip hatası ve ice-cream cone ile hourglass tuzakları.
Neden Test Yazarız? Unit, Integration, Contract, E2E, Smoke ve Diğer Test Türleri
Test yazmanın asıl getirisi regression'a karşı güven, değişiklik hızı ve çalışan dokümantasyondur; bedeli yazma, bakım, süre ve flaky testtir. Test türlerini scope (unit, component, integration, contract, E2E) ve amaç (smoke, regression, acceptance, exploratory) eksenlerinde ayırıyor, Google'ın small/medium/large sınıflandırmasının scope'tan bağımsız olduğunu Bookstore'daki altı gerçek test ve ölçülen sürelerle gösteriyoruz.