Nous avons parfois besoin de jeu de données factices pour nos tests unitaires, peupler une base de données ou pour simuler un service externe par exemple. Il peut être complexe et assez lourd de créer des jeu de données. Je vais vous présenter NBuilder et Faker.Net qui sont 2 librairies pour vous aider à générer vos jeux de données. Ces 2 librairies sont disponibles sous forme de package NuGet.
NBuilder
NBuilder est une librairie qui permet de créer facilement et rapidement des objets, basé sur le design pattern builder. Il va renseigner automatiquement pour vous les propriétés publiques de vos objets. Vous pouvez bien entendu préciser comment générer certaines propriétés.
Par défaut, NBuilder crée des valeur séquentielle dans le cas des liste (Name1, Name2, …)
NBuilder fournit une classe GetRandom qui permet de générer des données aléatoire pour un certains type de données (url, nom , pays, …).
//Création d'un objet var product = Builder<Product> .CreateNew() .With(x => x.Name = "Nexus 5") .With(x => x.Price = 199) .Build(); //Création d'une liste var products = Builder<Product> .CreateListOfSize(10) .All() .With(x => x.Name = GetRandom.String(10)) .With(x => x.Price = GetRandom.Int(100, 400)) .Build();
NBuilder fournit également Pick qui permet de sélectionner un objet dans une autre liste
//Sélection d'1 seul élément Pick<Category>.RandomItemFrom(categories)) //Sélection d'un sous ensemble d'élément Pick<Category>.UniqueRandomList(With.Between(5).And(10).Elements).From(categories);
Faker.NET
Faker.Net est un bon complément à NBuilder car il permet de générer des valeurs plus réaliste pour les données. Faker.Net contient plus de type de données que NBuilder.
Il contient des générateurs pour:
- Addresse: (pays, code postal, ville, …)
- Téléphone
- Internet (email, password, IP, …)
- Nom
- Date
- Entreprise
- Finance (Prix, Compte, …)
- …
//Utilisation de Faker.Net avec NBuilder var customers = Builder<Customer>.CreateListOfSize(100) .All() .With(c => c.FirstName = Faker.Name.First()) .With(c => c.LastName = Faker.Name.Last()) .With(c => c.EmailAddress = Faker.Internet.Email()) .With(c => c.TelephoneNumber = Faker.Phone.Number()) .Build();
Un petit exemple d’utilisation avec .Net Fiddle