Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Automatically generate intelligent and realistic test data for an object.

Build status

NuGet Version

Coverage Status


The DataGenerator library is available on via package name DataGenerator.

To install DataGenerator, run the following command in the Package Manager Console

PM> Install-Package DataGenerator

More information about NuGet package available at

Development Builds

Development builds are available on the feed. A development build is promoted to the main NuGet feed when it's determined to be stable.

In your Package Manager settings add the following package source for development builds:


  • Generate intelligent test data based on property type and name
  • Automatic discovery of data sources
  • Fully customizable property data sources
  • Realistic data sources
  • Weighted value selection
  • Easy fluent API


Full class property configuration

Generator.Default.Configure(c => c
    .Entity<User>(e =>
        e.Property(p => p.FirstName).DataSource<FirstNameSource>();
        e.Property(p => p.LastName).DataSource<LastNameSource>();
        e.Property(p => p.Address1).DataSource<StreetSource>();
        e.Property(p => p.City).DataSource<CitySource>();
        e.Property(p => p.State).DataSource<StateSource>();
        e.Property(p => p.Zip).DataSource<PostalCodeSource>();
        e.Property(p => p.Note).DataSource<LoremIpsumSource>();
        e.Property(p => p.Password).DataSource<PasswordSource>();
        // array of values
        e.Property(p => p.Status).DataSource(new[] { Status.New, Status.Verified });
        // don't generate
        e.Property(p => p.Budget).Ignore();
        // static value
        e.Property(p => p.IsActive).Value(true);
        // delegate value
        e.Property(p => p.Created).Value(() => DateTime.Now);

Example of configuration for generating child classes

Generator.Default.Configure(c => c
    .Entity<Order>(e =>
        // generate a User instance
        e.Property(p => p.User).Single<User>();
        // generate list of OrderLine items
        e.Property(p => p.Items).List<OrderLine>(2);
    .Entity<OrderLine>(e =>
        e.Property(p => p.Quantity).IntegerSource(1, 10);

There are extension methods to configure properties as well

Generator.Default.Configure(c => c
    .Entity<OrderLine>(e =>
        // random number between 1 and 10
        e.Property(p => p.Quantity).IntegerSource(1, 10);
        // between 100 and 1,000
        e.Property(p => p.UnitAmount).DecimalSource(100, 1000);


DataGenerator support class profiles to make configuration easier. To create a profile, inherit from the MappingProfile<T> base class.

Sample Profile for the User class

public class UserProfile : MappingProfile<User>
    public override void Configure()
        Property(p => p.FirstName).DataSource<FirstNameSource>();
        Property(p => p.LastName).DataSource<LastNameSource>();
        Property(p => p.Address1).DataSource<StreetSource>();
        Property(p => p.City).DataSource<CitySource>();
        Property(p => p.State).DataSource<StateSource>();
        Property(p => p.Zip).DataSource<PostalCodeSource>();
        Property(p => p.Note).DataSource<LoremIpsumSource>();
        Property(p => p.Password).DataSource<PasswordSource>();
        // array of values
        Property(p => p.Status).DataSource(new[] { Status.New, Status.Verified });
        // don't generate
        Property(p => p.Budget).Ignore();
        // static value
        Property(p => p.IsActive).Value(true);
        // delegate value
        Property(p => p.Created).Value(() => DateTime.UtcNow);

Register a profile in the configuration

Generator.Default.Configure(c => c


Generate test data

// generate a user
var instance = Generator.Default.Single<User>();

// generate 10 users
var users = Generator.Default.List<User>(10)

You can override the configuration

var instance = Generator.Default.Single<User>(c =>
    // override note property with static value
    c.Property(p => p.Note).Value("Testing static value");

Data Sources

Primitive Value Data Sources

BooleanSource - Random true or false
DateTimeSource - Random date plus or minus 10 years from now
DecimalSource - Random decimal between 0 and 1,000,000
FloatSource - Random float between 0 and 1,000,000
GuidSource - Random GUID value
IntegerSource - Random integer between 0 and 32,000
ListDataSource - Random value from the specified list
TimeSpanSource - Random TimeSpan between 0 sec and 1 day
ValueSource - Static value source

Smart Data Sources

CitySource - Random city name from a list of the largest US cities
CompanySource - Random company name from a list of fortune 500 companies
CreditCardSource - Random credit care number
EmailSource - Random email address using common domains
EnumSource - Random value from available enum values
FirstNameSource - Random first name from 100 common first names
IdentifierSource - Random identifier value
LastNameSource - Random last name from 100 common last names
LoremIpsumSource - Random lorem ipsum text
MoneySource - Random dollar amount between 0 and 10,000
NameSource - Random code name from various sources
PasswordSource - Random pronounceable password
PhoneSource - Random phone number in US format
PostalCodeSource - Random US zip code
SocialSecuritySource - Random US Social Security Number
StateSource - Random US State
StreetSource - Random US house number and street
WebsiteSource - Random website from top 100 list


Automatically generate data for an object








No releases published


No packages published

Contributors 4