Basit Bir Test Framework Geliştirelim 7

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Bu sefer Assert sınıfına IsEmpty ve IsNotEmpty işlevlerini ekleyelim. Bu işlevler sayesinde, bir koleksiyonun boş olup olmadığını kontrol edebiliriz. using System; using System.Collections.Generic; using System.Linq; using System.Threading; // ... önceki exception sınıfları ... public class AssertIsEmptyFailedException : AssertFailedException { public AssertIsEmptyFailedException() : base("Expected collection to be empty, but it was not.") { } } public class AssertIsNotEmptyFailedException : AssertFailedException { public AssertIsNotEmptyFailedException() : base("Expected collection to not be empty, but it was.

Devamı 


Basit Bir Test Framework Geliştirelim 6

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Evet, Assert sınıfımıza IsInstanceOfType ve IsNotInstanceOfType işlevlerini ekleyelim. Bu işlevler, bir nesnenin belirli bir türden olup olmadığını kontrol eder. Ayrıca, her biri için özel hata türleri oluşturalım. using System; using System.Collections.Generic; using System.Linq; using System.Threading; // ... önceki exception sınıfları ... public class AssertIsInstanceOfTypeFailedException : AssertFailedException { public AssertIsInstanceOfTypeFailedException(object value, Type expectedType) : base($"Expected {value} to be instance of type {expectedType}, but it was not.") { } } public class AssertIsNotInstanceOfTypeFailedException : AssertFailedException { public AssertIsNotInstanceOfTypeFailedException(object value, Type expectedType) : base($"Expected {value} not to be instance of type {expectedType}, but it was.

Devamı 


Basit Bir Test Framework Geliştirelim 5

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Bu sefer, ‘Assert’ sınıfına ‘LessThan’, ‘LessThanOrEqual’, ‘GreaterThan’, ve ‘GreaterThanOrEqual’ işlevleri ekleyelim. Bu işlevler sayesinde, iki değerin birbirine göre sıralamasını kontrol edebiliriz. Ayrıca, her biri için özel hata türleri oluşturalım. using System; using System.Collections.Generic; using System.Linq; using System.Threading; // ... önceki exception sınıfları ... public class AssertLessThanFailedException : AssertFailedException { public AssertLessThanFailedException(object value, object boundary) : base($"Expected {value} to be less than {boundary}, but it was not.") { } } public class AssertLessThanOrEqualFailedException : AssertFailedException { public AssertLessThanOrEqualFailedException(object value, object boundary) : base($"Expected {value} to be less than or equal to {boundary}, but it was not.

Devamı 


Basit Bir Test Framework Geliştirelim 4

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Assert sınıfını daha da geliştirelim. Şimdi, özel hata mesajları içeren Assert hata türleri ekleyelim. Bu, hataları daha iyi yönetmeyi ve test hatalarını daha iyi tanımlamayı sağlayacaktır. using System; using System.Collections.Generic; using System.Linq; using System.Threading; public class AssertFailedException : Exception { public AssertFailedException(string message) : base(message) { } } public class AssertEqualFailedException : AssertFailedException { public AssertEqualFailedException(object expected, object actual) : base($"Expected: {expected}, Actual: {actual}") { } } public class AssertNotEqualFailedException : AssertFailedException { public AssertNotEqualFailedException(object value) : base($"Unexpected value: {value}") { } } public class AssertTrueFailedException : AssertFailedException { public AssertTrueFailedException() : base("Expected condition to be true, but was false.

Devamı 


Basit Bir Test Framework Geliştirelim 3

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Assert sınıfımıza daha fazla method ekleyelim. using System; namespace SimpleTestFramework { public class Assert { public static void Equal(object expected, object actual, string message = null) { if (!expected.Equals(actual)) { throw new Exception(message ?? $"Expected {expected}, but got {actual}"); } } public static void True(bool condition, string message = null) { if (!condition) { throw new Exception(message ?? "Expected condition to be true, but was false."); } } public static void False(bool condition, string message = null) { if (condition) { throw new Exception(message ?

Devamı 


Basit Bir Test Framework Geliştirelim 2

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Basit test framework’ümüze birkaç özellik ekleyelim. SetUp ve TearDown metodları, bu metodlar, her test öncesi ve sonrası çalışır ve testler arasında tekrar eden kodu azaltmaya yardımcı olabilir. using System; namespace SimpleTestFramework { public class TestAttribute : Attribute { } public class SetUpAttribute : Attribute { } public class TearDownAttribute : Attribute { } public class Assert { public static void Equal(object expected, object actual) { if (!expected.Equals(actual)) { throw new Exception($"Test Failed: Expected {expected}, but got {actual}"); } } } public class TestRunner { public void RunTests<T>() where T : new() { var type = typeof(T); var instance = new T(); var setUpMethod = Array.

Devamı 


Basit Bir Test Framework Geliştirelim 1

2023-05-11 | #diy-unittest-framework #do-it-yourself #net #reflection #unit-test

Unit test yazarken genellikle NUnit veya XUnit gibi mevcut unit test framework’leri kullanılırız. Ancak, eğer basit bir unit test framework’ü kendimiz yazmak istersek, nasıl yaparız?. Ve başlayalım. Tek bir assert methodumuz ve runner ımızla başlangıcı yapalım. using System; namespace SimpleTestFramework { public class TestAttribute : Attribute { } public class Assert { public static void Equal(object expected, object actual) { if (!expected.Equals(actual)) { throw new Exception($"Test Failed: Expected {expected}, but got {actual}"); } } } public class TestRunner { public void RunTests<T>() where T : new() { var type = typeof(T); var instance = new T(); foreach (var method in type.

Devamı 


Reflection Ve IL Emit Kullanarak Basit Object Mapper

2023-05-08 | #diy-object-mapper #do-it-yourself #il-emit #net #object-mapper #reflection

Daha önce çalıştığımız reflection makalelerini kullanarak, .NET 6 ile AutoMapper benzeri bir yapıda mapping uygulamasını reflection ve IL emit kullanarak performanslı olacak şekilde yazalım. Mapping API’sini oluşturmak için, MyMappingLibrary projesine IMapper adında bir arayüz ve Mapper adında bir sınıf ekleyin. IMapper.cs public interface IMapper { TDestination Map<TSource, TDestination>(TSource source); void CreateMap<TSource, TDestination>(); } Mapper.cs using System; using System.Collections.Generic; using System.Reflection; using System.Reflection.Emit; public class Mapper : IMapper { private readonly Dictionary<(Type Source, Type Destination), Delegate> _mappingFunctions = new(); public TDestination Map<TSource, TDestination>(TSource source) { if (source == null) { throw new ArgumentNullException(nameof(source)); } var key = (typeof(TSource), typeof(TDestination)); if (!

Devamı 


Linq Ve Transactionlar İle Conflictlerin Çözülmesi

2023-05-08 | #linq #net #transaction

Veritabanları ile çalışırken, eşzamanlı transactionların doğru bir şekilde yönetilmesi ve veri bütünlüğünün korunması büyük önem taşır. LINQ (Language Integrated Query) ile veritabanı işlemlerinde transactionlar (transactions) kullanarak çakışmaların nasıl çözüleceği konusunda örnekler ve ve öneriler gösterilecektir. Transactionlar (Transactions) Nedir? Transactionlar, veritabanı üzerinde gerçekleştirilen bir dizi işlemi gruplayan ve bu işlemlerin tamamının başarılı bir şekilde tamamlanmasını veya hiçbirinin gerçekleştirilmemesini sağlayan bir yöntemdir. Transactionlar, veri bütünlüğünü korumak ve eşzamanlı işlemlerde çakışmaları çözmek için kullanılır.

Devamı 


LINQ ve Optimistic Concurrency: Veri Bütünlüğünü Koruma Yöntemleri

2023-05-08 | #linq #net #optimistic-concurrency

Veri tabanları ile çalışırken, eşzamanlı işlemlerin doğru bir şekilde yönetilmesi ve veri bütünlüğünün korunması büyük önem taşır. Concurrency kontrolü, birden fazla kullanıcının veya işlemin aynı verilere eşzamanlı olarak erişmesini yönetmek için kullanılır. Bu makalede, LINQ (Language Integrated Query) ile optimistic concurrency kullanarak veri bütünlüğünü nasıl koruyabileceğimizi inceleyeceğiz. Optimistic Concurrency Nedir? Optimistic concurrency, işlem başladığında kaynağın kilitlenmediği, ancak işlem tamamlanmadan önce yapılan değişikliklerin kontrol edildiği bir yöntemdir. Bu yaklaşım, düşük çakışma riski olan senaryolarda veri bütünlüğünü korumak için daha uygundur.

Devamı 