using System.Collections.Generic;
public static void Main()
TestBuildPassFirstNameAndLastName();
public static void TestBuildDefault()
Utils.WriteTitle("EmployeeBuilder.Build Default");
var employee = new EmployeeBuilder().Build();
Utils.WriteJson(employee);
public static void TestBuildPassFirstNameAndLastName()
Utils.WriteTitle("EmployeeBuilder.Build Default");
var employee = new EmployeeBuilder()
.Customize(f => f.RuleFor(p => p.FirstName, f => "TestFirstName"))
.Customize(f => f.RuleFor(p => p.LastName, f => "TestLastName"))
Utils.WriteJson(employee);
public static void TestBuildOld()
Utils.WriteTitle("EmployeeBuilder.Build Old");
var employee = new EmployeeBuilder()
Utils.WriteJson(employee);
public static void TestBuildYoung()
Utils.WriteTitle("EmployeeBuilder.Build Young");
var employee = new EmployeeBuilder()
Utils.WriteJson(employee);
public abstract class BuilderBase<TEntity>
protected Faker<TEntity> Faker = new();
public BuilderBase<TEntity> Customize(Action<Faker<TEntity>> action)
public TEntity Build() => Faker.Generate();
public List<TEntity> Build(int count) => Faker.Generate(count);
public class EmployeeBuilder : BuilderBase<Employee>
.RuleFor(p => p.FirstName, f => f.Name.FirstName())
.RuleFor(p => p.LastName, f => f.Name.LastName())
.RuleFor(p => p.JobTitle, f => f.Name.JobTitle())
.RuleFor(p => p.Email, f => f.Internet.Email())
.RuleFor(p => p.Age, f => f.Random.Int(20, 50));
public EmployeeBuilder Old()
.RuleFor(p => p.Age, f => f.Random.Int(50, 60));
public EmployeeBuilder Young()
.RuleFor(p => p.Age, f => f.Random.Int(20, 30));
public string FirstName {get; set;}
public string LastName {get; set;}
public string JobTitle {get; set;}
public string Email {get; set;}
public int Age {get; set;}
public static class Utils
public static void WriteTitle(string title)
Console.WriteLine("====================================");
Console.WriteLine(title);
public static void WriteJson(object obj)
var options = new JsonSerializerOptions { WriteIndented = true};
var json = JsonSerializer.Serialize(obj, options);