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:
- Bogus nedir ve neden kullanılır?
- Kurulum ve basit örnekler
- Locale kullanımı ve yerelleştirme
- Gelişmiş senaryolar (Nested objeler, koleksiyonlar)
- Katmanlı mimaride entegrasyon
başlıklarını örnek kod bloklarıyla ele alacağız.

1. Bogus Nedir? Temel Kavramlar
- Bogus: .NET için fake data (sahte veri) kütüphanesi
- Faker:
Bogus.Faker<T>ileTtipinde sahte nesneler oluşturma - Rules:
RuleFormetodu 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
triç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.IndexFakerile 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()veAddress.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
Personnesnesi listesini tek seferde üretir.
6. Katmanlı Mimari Entegrasyonu
- Test Projesi:
Boguskullanı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);

Dahili Bağlantılar
- Unit test verileri için Generic Repository Tasarımı ile entegrasyon.
- Test stratejileri hakkında daha fazlası için Result Pattern ile Tutarlı Response yazımıza bakın.
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
UseSeedkullanın.