Giriş

Gerçekçi, rastgele ve anlamlı test verileri üretmek, birim testlerin ve geliştirme ortamının güvenilirliğini artırır. Elle JSON, XML veya obje oluşturmaktansa, Bogus kütüphanesiyle dakikalar içinde onlarca farklı senaryo için veri oluşturabilirsiniz.
Bu rehberde:

  1. Bogus nedir ve neden kullanılır?
  2. Kurulum ve basit örnekler
  3. Locale kullanımı ve yerelleştirme
  4. Gelişmiş senaryolar (Nested objeler, koleksiyonlar)
  5. Katmanlı mimaride entegrasyon

başlıklarını örnek kod bloklarıyla ele alacağız.

bogus-kutuphanesi-akis-diyagrami

1. Bogus Nedir? Temel Kavramlar

  • Bogus: .NET için fake data (sahte veri) kütüphanesi
  • Faker: Bogus.Faker<T> ile T tipinde sahte nesneler oluşturma
  • Rules: RuleFor metodu ile property bazlı değer tanımlama

2. Avantajlar & Dezavantajlar

Avantajlar

  • Hızlı Kurulum & Kullanım: Dakikalar içinde devreye alırsınız.
  • Zengin Veri Kaynakları: İsim, adres, telefon, para, tarih vb. pek çok kategori.
  • Locale Desteği: Farklı kültürlere özgü veri (örneğin tr için Türkçe isimler).
  • Fluent API: Zincirlenebilir, okunabilir kural tanımları.

Dezavantajlar

  • Performans: Çok büyük veri setlerinde nesne oluşturma maliyetli olabilir.
  • Deterministik Olmayan Test: Rastgele veriler bazen test sabitliğini etkileyebilir; seed kullanmak gerekir.
  • Aşırı Özelleştirme: Çok karmaşık kural ağacı okunabilirliği zorlaştırabilir.

3. Kurulum ve Basit Örnekler

NuGet Paketi

dotnet add package Bogus

En Basit Kullanım

using Bogus;

var faker = new Faker<Person>("tr")
    .RuleFor(p => p.Id, f => f.IndexFaker + 1)
    .RuleFor(p => p.Name, f => f.Name.FullName())
    .RuleFor(p => p.Email, f => f.Internet.Email());

Person fake = faker.Generate();
Console.WriteLine($"{fake.Id} - {fake.Name} - {fake.Email}");
  • ("tr") ile Türkçe locale seçildi.
  • IndexFaker ile artan bir sayaç elde edilir.

4. Locale ve Yerelleştirme

var sehirFaker = new Faker<Address>("tr")
    .RuleFor(a => a.City, f => f.Address.City())
    .RuleFor(a => a.ZipCode, f => f.Address.ZipCode());

Address adres = sehirFaker.Generate();
  • Address.City() ve Address.ZipCode() gibi metodlar locale’e göre değer döner.

5. Gelişmiş Senaryolar

Nested Nesneler

public class Order
{
    public int OrderId { get; set; }
    public Person Customer { get; set; }
    public List<OrderItem> Items { get; set; }
}

var orderFaker = new Faker<Order>("tr")
    .RuleFor(o => o.OrderId, f => f.IndexFaker + 1000)
    .RuleFor(o => o.Customer, f => faker.Generate())
    .RuleFor(o => o.Items, f => new Faker<OrderItem>("tr")
        .RuleFor(i => i.ProductName, f2 => f2.Commerce.ProductName())
        .RuleFor(i => i.Quantity, f2 => f2.Random.Number(1, 5))
        .Generate(f.Random.Number(1, 5)));

Koleksiyon

List<Person> people = faker.Generate(10);
  • 10 adet Person nesnesi listesini tek seferde üretir.

6. Katmanlı Mimari Entegrasyonu

  • Test Projesi: Bogus kullanımını burada toplayın.
  • Main Proje: Seed verisi veya demo senaryolar için küçük util katman.
  • CI/CD Pipeline: Automasyon testlerinde seed sabitleme faker.UseSeed(1234);

bogus-katmanli-mimari-semasi

Dahili Bağlantılar

7. İleri Okuma ve Kaynaklar

8. Sonuç

  • Bogus, gerçekçi test verisi üretmek için ideal.
  • Locale, nested objeler ve koleksiyonlarla zengin senaryolar oluşturabilirsiniz.
  • Test projelerinde güvenilir ve tekrarlanabilir veri için UseSeed kullanın.

By tanju.bozok

Software Architect, Developer, and Entrepreneur

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir