This project is an automatic creator and populator for the fake data generator Bogus. It's a replacement for the abandoned AutoBogus library.
The goals:
- Be fast
- Support the latest types in .NET
It uses the fastest .NET Reflection cache: soenneker.reflection.cache. Bogus updates are automatically integrated.
.NET 8+ is supported.
dotnet add package Soenneker.Utils.AutoBogus
- Create an
AutoFaker
instance:
var optionalConfig = new AutoFakerConfig();
var autoFaker = new AutoFaker(optionalConfig);
- Call
Generate<>()
on any type you want:
var randomWord = autoFaker.Generate<string>();
var dictionary = autoFaker.Generate<Dictionary<int, string>>();
var order = autoFaker.Generate<Order>();
- It's also possible to generate types via an argument:
var randomWord = autoFaker.Generate(typeof(string));
- Set a faker, configuration, rules, etc:
autoFaker.Config.Faker = new Faker("de");
autoFaker.Config.RepeatCount = 3;
...
This is the recommended way for controlling type customization:
public class OrderOverride : AutoFakerOverride<Order>
{
public override void Generate(AutoFakerOverrideContext context)
{
var target = (context.Instance as Order)!;
target.Id = 123;
// Faker is available
target.Name = context.Faker.Random.Word();
// AutoFaker is also available
target.Customer = context.AutoFaker.Generate<Customer>();
}
}
Then just add AutoFakerOverride
to the AutoFaker.Config
instance:
autoFaker.Config.Overrides = new List<AutoFakerGeneratorOverride>();
autoFaker.Config.Overrides.Add(new OrderOverride());
This inherits from Bogus.Faker
, and can be used to designate rules specific to the AutoFaker
instance.
var autoFaker = new AutoFaker<Order>();
autoFaker.RuleFor(x => x.Id, f => f.Random.Number());
var order = autoFaker.Generate();
The base library does not generate interfaces or abstract objects, but these enable you to generate mocks of them:
- soenneker.utils.autobogus.moq
- soenneker.utils.autobogus.nsubstitute
- soenneker.utils.autobogus.fakeiteasy
⚠️ Instantiating anAutoFaker
takes a non-trivial amount of time because of BogusFaker
initialization (almost 1ms). It's recommended that a single instance be used if possible.AutoFaker.GenerateStatic<T>()
is also available, but should be avoided (as it creates a newAutoFaker
/Faker
on each call).
- Some patterns that existed in AutoBogus have been removed due to the complexity and performance impact.
- This is a work in progress. Contribution is welcomed.
Method | Mean | Error | StdDev |
---|---|---|---|
Generate_int | 79.40 ns | 0.635 ns | 0.563 ns |
Generate_string | 241.35 ns | 3.553 ns | 3.324 ns |
Generate_complex | 6,782.34 ns | 43.811 ns | 38.837 ns |
Method | Mean | Error | StdDev |
---|---|---|---|
Generate_string | 283.6 ns | 3.28 ns | 3.07 ns |
Generate_complex | 8,504.0 ns | 76.58 ns | 67.89 ns |
Method | Mean | Error | StdDev |
---|---|---|---|
Generate_int | 1.17 ms | 0.033 ms | 0.026 ms |
Generate_complex | 10.91 ms | 0.181 ms | 0.236 ms |
Method | Mean | Error | StdDev |
---|---|---|---|
Bogus_int | 19.70 ns | 0.176 ns | 0.165 ns |
Bogus_string | 171.75 ns | 2.763 ns | 2.585 ns |
Bogus_ctor | 730,669.06 ns | 8,246.622 ns | 7,310.416 ns |