Easy generation of fake/dummy data in C# with Faker.Net 🕵️
When developing, testing, or showcasing something it's often important to use data that is not real data. Either because you might not have actual data available yet or because you don't want to show or pick the data from real users which can contain sensitive information. Faker.Net
can help make this possible by making it very simple to get a lot of random names, addresses, emails, etc. In this article, we will show the range of possible values it can create and how to use them.
Quick history
The .NET library was initially a port of the 2009 version of the Ruby library Faker but has diverged in many ways. The Ruby library was itself a port of the Perl library Data::Faker from 2007. The library keeps being used and is updated to newer versions of .NET continuously. The cause for its continued use is probably due to its many use cases and very simple structure.
Getting started
First, we need to install the Faker.Net
package. We can do this through the Package Manager in Visual Studio or adding it through the CLI with:
dotnet add package Faker.Net
Now let's generate some data. We might want to create some instances of the following model.
class UserProfile
{
string Name { get; set; }
int Followers { get; set; }
string Area { get; set; }
string Bio { get; set; }
}
Here we need to generate a Name
, some random number in a plausible range, an Address
, and some random text for their Bio
.
We can generate a name from a combination of predefined First, Last, and Middle names together with optional suf/pre-fixes.
var user = new UserProfile();
user.Name = Faker.Name.FullName(NameFormats.WithPrefix);
// "Mrs. Jerod Nader"
In this case, we want the name to be specified with prefixes like "Mrs."
or "Mr."
. But we could also format the name ourselves by accessing the First
, Middle
, and Last
methods from Name
. Next, we want to generate a number for the Followers
field. We could have created a new Random
object instead and used its Next
method instead. Faker.Net
uses the RandomNumberGenerator
class from System.Security.Cryptography
instead, which can create even more random numbers and handles multithreading better.
user.Followers = Faker.RandomNumber.Next(0, 10000);
// 3452
Random numbers like these can be useful if you have some custom formatting for big numbers in your UI or just to see some varying data for a demo. Next, we want to generate where this user is from. For this, we want to get a random country and city.
user.Area = $"{Faker.Address.Country()}, {Faker.Address.City()}";
// "Fiji, Wavaland"
The country and city are generated independently so they will not fit together if you want to validate it later. You can also get Zipcodes and street names if you have a more complex address field. The last thing is to generate some text for the Bio
. We will simply use a simple Lorem Ipsum generator that is part of the library.
user.Bio = String.Join(" ", Faker.Lorem.Sentences(3));
// "Ea voluptas maiores nihil quia et eum. Vel et eos est architecto rerum est. Eum esse voluptatem ab necessitatibus."
Enums
We could imagine that we also had a field for the UserProfile
specifying their public visibility. This could be represented with an enum
like this.
enum Visibility
{
Public,
Private,
Internal,
}
Then we could get a random value for this enum
using Faker.Net
like so:
user.Visibility = Faker.Enum.Random<Visibility>();
// Visibility.Private
Domains and Emails
Domains and especially emails are also data types that are used a lot. This is one point where it is especially easy to see if you have simple used a random string or hardcoded a single email. We can generate a domain name like so:
user.CompanyDomain = Faker.Internet.DomainName();
// "torp.com"
And we can generate an email like so.
user.Email = Faker.Internet.Email(user.Name);
// "mrs_jerod.nader@hermanborer.name"
Here we used the user's previously set name for the email. It will internally use DomainName
to get a random domain for the email and convert the name to a username-style word. The DomainName
is picked from a list of plausible company names combined with a random valid top-level domain. We can also generate full URLs for something like user resources.
user.resources = Enumerable.Range(0,3).Select(_ => Faker.Internet.SecureUrl());
// "https://www.quigleyrobel.us/films/page.aspx"
// "https://www.braunborer.uk/guide/page.jsp"
// "https://www.jacobslind.biz/interviews/page.asp"
Conclusion
We have seen how we can use Faker.Net
to generate some random plausible data for some of the most used data types. This can make a big difference when you are testing or demoing a project both visually and functionally.