Generating Fake Data in C# with Bogus

닷넷디벨·2023년 6월 4일
0

테스트할 데이터가 있는 것은 중요합니다. 실제 환경을 더 잘 복제할 수 있는 단위 테스트를 생성하거나 데이터베이스에 샘플 데이터를 삽입하려는 경우에는 데이터를 생성하는 데 많은 시간을 들이지 않고 대표적인 데이터를 사용하는 것이 중요합니다.
거기서 보거스 도서관이 나옵니다. 이 오픈 소스 NuGet 패키지를 사용하면 애플리케이션 또는 데이터베이스에서 다양한 용도로 사용할 수 있는 가짜 데이터를 신속하게 생성할 수 있습니다. 이 비디오에서 우리는 보거스가 생성한 가짜 데이터를 사용하는 애플리케이션을 빠르게 회전시키는 방법에 대해 알아볼 것입니다

출처:https://youtu.be/ONJUPMYBgKI


blazor 서버앱을 한개 생성하곘습니다.
구성은 그냥 기본으로 하곘습니다.

Nuget 에서 bogus 패키지를 설치해줍니다.
프로젝트를 생성하면 기본적인 sample앱을 볼수있습니다.

Model 폴더에 Record 모델을 선업합니다.

public record PersonModel(
int id,
string firstname,
string lastname,
string email,
string phone, 
    string streetaddress,
    string city,
    string state,
    string zipcode,
    CreditRating Rating
    );
    
public enum CreditRating
{
    Excellent,
        VeryGood,
        Good,
        Fair,
        Poor
}


imort.razor에 using 시켜줍니다.
그리고 임시 데이타를 생성할 class를 생성합니다.
DataGenerator.cs

using Bogus;

public class DataGenerator
{
    Faker<PersonModel> personModelFake;

    public DataGenerator()
    {
        Randomizer.Seed = new Random(123);
        personModelFake = new Faker<PersonModel>()
            .RuleFor(u => u.id, f => f.Random.Int(1, 10000))
            .RuleFor(u => u.firstname, f => f.Name.FindName())
            .RuleFor(u => u.lastname, f => f.Name.LastName())
            .RuleFor(u => u.city, f => f.Address.City())
            .RuleFor(u => u.phone, f => f.Phone.PhoneNumber())
            .RuleFor(u => u.state, f => f.Address.StateAbbr())
            .RuleFor(u => u.zipcode, f => f.Address.ZipCode())
            .RuleFor(u => u.email, (f, u) => f.Internet.Email(u.firstname, u.lastname))
            .RuleFor(u => u.phone, f => f.Name.FindName())
            .RuleFor(u => u.Rating, f => f.PickRandom<CreditRating>());
    }

    public PersonModel GeneratePerson()
    {
        return personModelFake.Generate();
    }
}

using Bogus; using 을 한후
Faker personModelFake; bogus 프로바이더를 선업합니다.
그리고 생성자에
Randomizer.Seed = new Random(123); 생성한 임시데이타에 수량을 설정한후

이런식으로 값 value에 rule 설정해서 임시데이타를 설정합니다.
personModelFake = new Faker()
.RuleFor(u => u.id, f => f.Random.Int(1, 10000))
.RuleFor(u => u.zipcode, f => f.Address.ZipCode())
.RuleFor(u => u.email, (f, u) => f.Internet.Email(u.firstname, u.lastname))
.RuleFor(u => u.phone, f => f.Name.FindName())
.RuleFor(u => u.Rating, f => f.PickRandom());

그리고 program.cs에서 해당 DataGenerator 의존성을 선언합니다.
builder.Services.AddTransient();

Index.razor

@page "/"

@inject DataGenerator data

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />

@data.GeneratePerson().ToString()

이렇게 하고 실행은 하면 오류가 나는데 record 모델은 동적으로 바인딩할수 없기 때문입니다. 이럴떄 약간의 꽁수로 record를 get set 모델로 바꿉니다.

public record PersonModel {
public  int id { get; set; }
public  string firstname { get; set; }
public  string lastname { get; set; }
public  string email { get; set; }
public  string phone { get; set; }
public  string streetaddress { get; set; }
public  string city { get; set; }
public  string state { get; set; }
public  string zipcode { get; set; }
public   CreditRating Rating { get; set; }
}

실행을 하면

꽤 쓸만한 쓸만한 데이타가 나옵니다.

여러개의 임시 데이타를 얻기 위해서는

 public IEnumerable<PersonModel> GenerateForever()
  {
      return personModelFake.GenerateForever();
  }

GenerateForever 로 생성하고

 private void LoadData()
  {
      //var results = data.GeneratePerson();
      //people.Add(results);
      var results = data.GenerateForever().Take(10);
      people.AddRange(results); 
  }

원하는 갯수만큼 가져올수 있습니다.

profile
hardcore developer

0개의 댓글