.NET Core: Bogus kullanarak Dummy Data Üretmenin Kolay Yolu

Bogus, geliştiricilere geniş bir sahte veri kataloğu sunar; isimler, adresler, telefon numaraları ve hatta lorem ipsum metinler gibi. Her bir veri noktası, gerçek veri yapısını taklit edecek şekilde özenle tasarlanmıştır, böylece testleriniz daha anlamlı ve geçerli olur

Murat Dinç
Devops Türkiye☁️ 🐧 🐳 ☸️
7 min readNov 9, 2023

--

Selamlar,

Yazılım geliştirmenin hayati bir parçası olan test süreçleri, bizi sıklıkla sahte ancak gerçekçi verilere yönlendirir. Kaliteli ve güvenilir yazılım ürünleri oluşturabilmenin temel taşlarından biri, bu verilerin doğruluğunu ve tutarlılığını sağlamaktır. Test aşamasında, uygulamanın beklenen ve beklenmeyen durumlar karşısındaki davranışını ölçmek için gerçek dünyadan alınmış gibi verilere ihtiyaç duyarız. Gerçekçi verilerle çalışmak, uygulamanın performansını doğru bir şekilde değerlendirmemize, olası hataları önceden tespit etmemize ve kullanıcı deneyimini daha iyi anlamamıza olanak tanır.

Bogus Nedir?

.NET Core projelerinizde, test verisi üretme konusunda ihtiyaç duyduğunuz çözüm Bogus kütüphanesidir. Bogus, geliştiricilere geniş bir sahte veri kataloğu sunar; isimler, adresler, telefon numaraları ve hatta lorem ipsum metinler gibi. Her bir veri noktası, gerçek veri yapısını taklit edecek şekilde özenle tasarlanmıştır, böylece testleriniz daha anlamlı ve geçerli olur. Sadece temel veri tipleriyle sınırlı kalmayan Bogus, tarihler ve özel formatlar gibi daha karmaşık veri yapılarını da kolayca üretebilir. Böylelikle, geliştirme ve test süreçlerinizde zaman kazanmanızı ve odak noktanızı yazılımın daha stratejik yönlerine yönlendirmenizi sağlar.

💡 Örneğin, bir e-ticaret sitesi için kullanıcılar ve onların sipariş geçmişlerini simüle eden verileri, gerçek kullanıcı davranışlarını ve sipariş senaryolarını yansıtacak şekilde üretebilirsiniz. Ya da bir sosyal medya uygulaması test ediyorsanız, gerçekçi kullanıcı profilleri ve paylaşımlar oluşturarak uygulamanızın farklı veri senaryolarında nasıl davrandığını gözlemleyebilirsiniz.

Bogus, NuGet üzerinden kolayca projenize eklenebilir. Paketi yüklemek için NuGet Package Manager kullanabilirsiniz.

Install-Package Bogus

Bogus ile sahte veriler üretmek için öncelikle bir Faker nesnesi oluşturmanız gerekmektedir. Bu nesne, çeşitli tiplerde rastgele veriler üretmenize olanak tanır.

using Bogus;

var userFaker = new Faker<User>()
.RuleFor(u => u.Id, f => f.IndexFaker)
.RuleFor(u => u.FirstName, f => f.Name.FirstName())
.RuleFor(u => u.LastName, f => f.Name.LastName())
.RuleFor(u => u.Email, f => f.Internet.Email());

List<User> users = userFaker.Generate(10);

Yukarıdaki örnekte, User nesnesi için sahte veri üreten bir Faker örneği görmektesiniz. RuleFor metodu, belirli bir property için hangi tip veri üretileceğini belirler. Generate metodu ise belirttiğiniz sayıda sahte nesne üretir.

Bogus, veri üretim sürecini özelleştirmek için geniş imkanlar sunar. Örneğin, belirli bir pattern’e göre veri üretmek veya rastgele değerler arasında seçim yapmak için aşağıdaki gibi kullanabilirsiniz:

var orderFaker = new Faker<Order>()
.RuleFor(o => o.OrderId, f => f.Random.Guid())
.RuleFor(o => o.Quantity, f => f.Random.Number(1, 5))
.RuleFor(o => o.Price, f => f.Commerce.Price(1.00m, 1000.00m))
.RuleFor(o => o.Status, f => f.PickRandom<OrderStatus>());

Bu örnekte, Order nesnesi için OrderId olarak GUID, Quantity için 1 ile 5 arasında bir sayı, Price için ise 1.00 ile 1000.00 arasında bir fiyat ve Status için ise OrderStatus enum tipinden rastgele bir değer üretiyoruz.

🌍 Yerelleştirme Desteği

Bogus, geniş bir dizi yerelleştirme seçeneği sunar ve çok sayıda farklı dil ve kültür için sahte veri üretebilir. Kütüphanenin desteklediği diller arasında İngilizce, Almanca, İspanyolca, Fransızca, İtalyanca ve daha birçokları yer alır. Yerelleştirme desteği, kütüphanenin belirli bir kültüre özgü isimler, adresler ve telefon numaraları gibi verileri gerçekçi bir şekilde üretmesini sağlar.

Bogus kütüphanesi .WithLocale() metodunu kullanarak farklı diller için yerelleştirme desteği sağlar. Bu metod, Faker sınıfı örneklerinde kullanılabilir ve kütüphanenin çeşitli dillerdeki veri kümesini kullanmasını sağlar.

Örneğin, Almanca için yerelleştirilmiş veri üretmek istiyorsanız, kütüphaneyi aşağıdaki gibi kullanabilirsiniz.

var faker = new Faker("de");

Bu, Faker örneğinin Almanca yerelleştirme ayarlarını kullanmasını sağlar ve böylece ürettiği veriler Almanya’ya özgü olur.

Bogus’un desteklediği dillerin ve yerelleştirmelerin tam listesine Bogus kütüphanesinin GitHub sayfasında ulaşılabilir.

Gerçek Dünya Örnekleri

Bogus, e-posta, adres, kullanıcı adı gibi gerçek dünya verilerini taklit etmek için özel metodlar sunar:

var customerFaker = new Faker<Customer>()
.RuleFor(c => c.Email, f => f.Internet.Email())
.RuleFor(c => c.Phone, f => f.Phone.PhoneNumber())
.RuleFor(c => c.Address, f => f.Address.FullAddress());

Burada, sahte müşteri verileri üretmek için Internet, Phone ve Address property’leri kullanılıyor.

Address

Address, sahte adres verileri üretmek için çeşitli özellikler ve metotlar sunar. Bu özellikler genellikle gerçekçi adres bilgileri üretmek için kullanılır.

  • FullAddress(): Tam adresi (sokak adresi, şehir, eyalet ve posta kodu dahil) bir string olarak döndürür.
  • ZipCode(): Rastgele bir posta kodu üretir. İsteğe bağlı olarak belirli bir format belirtilebilir.
  • City(): Rastgele bir şehir ismi üretir.
    StreetAddress(): Rastgele bir sokak adresi üretir. İsteğe bağlı olarak sokak numarasını içerebilir.
  • Country(): Rastgele bir ülke ismi üretir.
  • CountryCode(): Rastgele bir ülke kodu üretir (örneğin, “US”, “CA”).
  • State(): Rastgele bir eyalet ismi üretir.
  • StateAbbr(): Bir eyaletin kısaltmasını üretir (örneğin, “NY” for New York).
  • Latitude(): Rastgele bir enlem değeri üretir.
  • Longitude(): Rastgele bir boylam değeri üretir.
  • SecondaryAddress(): Rastgele bir ikincil adres (örneğin, apartman dairesi veya suit numarası) üretir.
  • County(): Rastgele bir ilçe ismi üretir.
    BuildingNumber(): Rastgele bir bina numarası üretir.
var faker = new Faker<Address>()
.RuleFor(a => a.StreetAddress, f => f.Address.StreetAddress())
.RuleFor(a => a.City, f => f.Address.City())
.RuleFor(a => a.State, f => f.Address.State())
.RuleFor(a => a.ZipCode, f => f.Address.ZipCode())
.RuleFor(a => a.Country, f => f.Address.Country());

Yerelleştirme özelliği sayesinde, belirli bir ülke veya bölgeye özgü adres formatlarını da destekler. Örneğin, Amerika Birleşik Devletleri için posta kodu formatı veya Japonya için şehir ve eyalet isimleri gibi.

Commerce

Commerce, e-ticaret ile ilgili sahte veri üretimi için bir dizi özellik sunar. Commerce nesnesi, ürün adları, renkler, fiyatlar ve hatta rastgele kategoriler gibi, e-ticaret alanına özgü veri türlerini kolayca oluşturmanıza olanak tanır.

  • Department(): Rastgele bir mağaza bölümü veya kategori adı döndürür.
  • ProductName(): Rastgele bir ürün adı üretir.
  • Color(): Rastgele bir renk adı döndürür.
  • Price(): Rastgele bir fiyat değeri üretir. Opsiyonel olarak minimum ve maksimum değer aralıkları belirtilebilir.
  • ProductAdjective(): Ürünleri tanımlamak için rastgele bir sıfat döndürür.
  • ProductMaterial(): Ürünler için rastgele bir materyal türü döndürür.
  • Ean13(): EAN-13 formatında rastgele bir barkod numarası üretir.
  • Ean8(): EAN-8 formatında rastgele bir barkod numarası üretir.
var faker = new Faker();
var productName = faker.Commerce.ProductName(); // Örnek Ürün Adı
var price = faker.Commerce.Price(); // Örnek Fiyat

Internet

Internet, çeşitli internetle ilgili rastgele veri üretme özellikleri sunar. Bu özellikler, web uygulamaları için test verileri oluştururken oldukça kullanışlıdır.

  • Email(): Rastgele bir e-posta adresi üretir.
  • FreeEmail(): Popüler e-posta servis sağlayıcılarından rastgele bir e-posta adresi üretir (örneğin, gmail.com, yahoo.com gibi).
  • UserName(): Rastgele bir kullanıcı adı üretir.
  • Password(): Rastgele bir şifre üretir. Parametrelerle, şifrenin uzunluğunu ve içermesi gereken karakter türlerini belirleyebilirsiniz.
  • DomainName(): Rastgele bir alan adı üretir.
  • DomainWord(): Rastgele bir alan adı kelimesi (domain prefix’i) üretir.
  • Url(): Rastgele bir URL üretir.
  • Ipv4(): Rastgele bir IPv4 adresi üretir.
var faker = new Faker();

var email = faker.Internet.Email();
var username = faker.Internet.UserName();
var password = faker.Internet.Password();
var domainName = faker.Internet.DomainName();
var url = faker.Internet.Url();
var ipV4 = faker.Internet.Ipv4();

Company

Company, şirketler ilgili rastgele veri üretme özellikleri sunar.

  • CompanyName(): Rastgele şirket isimleri üretir.
  • CompanySuffix(): Şirket isimlerinin sonuna eklenen, örneğin ‘Inc’, ‘LLC’, ‘Group’ gibi şirket türlerini temsil eden ekler üretir.
  • CatchPhrase(): Şirketlerin ya da işletmelerin tanıtım cümlelerini simüle eden yakalama ifadeleri üretir.
  • Bs(): İş dünyasında bulunabilecek jargon cümleler üretir (“business-speak” ifadeleri).
  • Ein(): Amerika Birleşik Devletleri’nde kullanılan, bir işletmenin Vergi Kimlik Numarası (Employer Identification Number) formatında rastgele bir değer üretir.
  • DunsNumber(): Dünya genelinde şirketlerin tanımlanması için kullanılan D-U-N-S numarası formatında rastgele bir değer üretir.
  • Logo(): Rastgele bir URL ile temsil edilen sahte bir şirket logosu URL’si üretir.
var companyFaker = new Faker<Company>()
.RuleFor(c => c.CompanyName, f => f.Company.CompanyName())
.RuleFor(c => c.CompanySuffix, f => f.Company.CompanySuffix())
.RuleFor(c => c.CatchPhrase, f => f.Company.CatchPhrase())
.RuleFor(c => c.Bs, f => f.Company.Bs())
.RuleFor(c => c.Ein, f => f.Company.Ein())
.RuleFor(c => c.DunsNumber, f => f.Company.DunsNumber())
.RuleFor(c => c.Logo, f => f.Company.Logo());

var fakeCompany = companyFaker.Generate();

Finance

Finance, finansal veri setleri oluşturmak için çeşitli metodlar sunar. Bu metodlar, test senaryolarınızda veya uygulama geliştirme süreçlerinizde kullanabileceğiniz gerçekçi finansal bilgiler üretmek için tasarlanmıştır.

  • AccountName(): Rastgele bir banka hesap adı üretir.
  • Account(numberLength): Belirli bir uzunlukta rastgele bir banka hesap numarası üretir.
  • Amount(min, max, decimals): Minimum ve maksimum değerler arasında, belirtilen ondalık basamak sayısı ile bir miktar para üretir.
  • TransactionType(): Rastgele bir işlem tipi üretir (örneğin, deposit, withdrawal).
  • Currency(): Rastgele bir para birimi ve açıklaması üretir.
  • CreditCardNumber(vendors): Belirli kart sağlayıcıları için geçerli kredi kartı numaraları üretir.
  • CreditCardCvv(): Rastgele bir kredi kartı CVV (Card Verification Value) kodu üretir.
  • Bic(): Rastgele bir BIC (Bank Identifier Code) üretir.
  • Iban(countryCode): Belirtilen ülke koduna göre rastgele bir IBAN (International Bank Account Number) numarası üretir.
  • RoutingNumber(): Rastgele bir ABA yönlendirme numarası üretir.
var faker = new Faker();
var accountName = faker.Finance.AccountName(); // "Savings Account"
var accountNumber = faker.Finance.Account(); // "123456789"
var amount = faker.Finance.Amount(100.00m, 1000.00m, 2); // Örnek: 500.25
var creditCardNumber = faker.Finance.CreditCardNumber("Visa"); // "4539-XXXX-XXXX-XXXX"

Images

Images, sahte görüntü URL’leri üretmek için çeşitli metodlar sunar. Bu metodlar, genellikle placeholder hizmetleri kullanarak test amaçlı görüntü URL’leri sağlar ve bu görüntüler, kullanıcı arayüzü prototipleri veya tasarım mockup’ları gibi durumlar için kullanılabilir.

  • ImageUrl(): Belirli boyutlarda rastgele bir placeholder görüntü URL’si üretir. İsteğe bağlı olarak, görüntü formatı, arka plan rengi, ön plan rengi ve metin gibi parametreler de sağlanabilir.
  • DataUri(): Belirli boyutlarda ve isteğe bağlı MIME türünde bir data URI’si içeren bir string döndürür. Bu metot, görüntü verilerini doğrudan base64 olarak kodlanmış bir string içinde saklar, böylece ayrı bir HTTP isteği yapmadan görüntüler sayfada gösterilebilir.
  • Abstract(), Animals(), Business(), Cats(), City(), Food(), Nightlife(), Fashion(), People(), Nature(), Sports(), Technics() ve Transport(): Bu metodlar, belirtilen kategorilere uygun rastgele placeholder görüntü URL’leri üretir.
var faker = new Faker();

// Rastgele bir 640x480 boyutunda görüntü URL'si üretir.
var imageUrl = faker.Image.ImageUrl();

// Belirli bir boyutta ve kategoriye ait görüntü URL'si üretir.
var catImageUrl = faker.Image.ImageUrl(width: 500, height: 500, categories: "cats");

// Özel metin içeren ve belirli bir format ve renklerde görüntü URL'si üretir.
var customImageUrl = faker.Image.ImageUrl(width: 500, height: 300, categories: "abstract", text: "Bogus");

Makaleyi faydalı bulduysanız takip ederek destek olabilirsiniz 🙏

Bir sonraki yazıda görüşmek üzere 😊

--

--