
Niveau :


9 minutes de lecture
Dans cet article, vous allez apprendre à utiliser Bogus pour générer des données réalistes pour vos tests ou bien pour alimenter des données de développements ainsi :
- Pourquoi des données toujours plus réalistes ?
- Prérequis
- Configuration de Bogus
- Utilisation de Bogus
- Gestion des langues avec Bogus
Pourquoi des données toujours plus réalistes ?
Lors de la phase de développement et surtout les tests, il est souvent compliqué d’avoir des données réalistes pour plusieurs raisons : confidentialité, données de production sensibles, RGPD, ect…
On se retrouve donc souvent a manipuler des classes complexes qui contiennent malheureusement des données de ce style :

Pourquoi ? Certainement pour plusieurs raisons comme la productivité, la pénibilité de créer des données cohérentes et/ou pleins d’autres raisons. Heureusement, Bogus est là pour nous sauver la vie.
Prérequis
- Un projet Console ou autre
Configuration de Bogus
Dans le projet ci-dessus, créons deux classes User.cs et Vehicule.cs comme ci-dessous :
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Region { get; set; }
public string PostalCode { get; set; }
public string Country { get; set; }
public string Phone { get; set; }
public Vehicule Vehicule { get; set; }
}
public class Vehicule
{
public string Vin { get; set; }
public string Constructor { get; set; }
public string Model { get; set; }
public string Type { get; set; }
public string Motor { get; set; }
}
Installez le package Bogus et configurez la class Program.cs comme ci-dessous :
Vous constatez qu’a chaque exécution, des données aléatoires sont générées.
Utilisation de Bogus
Complétons toutes les propriétés des classes comme ci-dessous :
var newVehicule = new Faker<Vehicule>()
.RuleFor(vehicule => vehicule.Vin, faker => faker.Vehicle.Vin())
.RuleFor(vehicule => vehicule.Model, faker => faker.Vehicle.Model())
.RuleFor(vehicule => vehicule.Motor, faker => faker.Vehicle.Fuel())
.RuleFor(vehicule => vehicule.Constructor, faker => faker.Vehicle.Manufacturer())
.RuleFor(vehicule => vehicule.Type, faker => faker.Vehicle.Type());
var newCustomer = new Faker<Customer>()
.RuleFor(user => user.FirstName, faker => faker.Person.FirstName)
.RuleFor(user => user.LastName, faker => faker.Person.LastName)
.RuleFor(user => user.Address, faker => faker.Person.Address.Street)
.RuleFor(user => user.PostalCode, faker => faker.Person.Address.ZipCode)
.RuleFor(user => user.City, faker => faker.Person.Address.City)
.RuleFor(user => user.Country, faker => faker.Person.Address.State)
.RuleFor(user => user.Phone, faker => faker.Person.Phone)
.RuleFor(user => user.Region, faker => faker.Person.Address.State)
.RuleFor(user => user.Vehicule, faker => newVehicule.Generate());
Console.WriteLine(JsonSerializer.Serialize(newCustomer.Generate()));

Imaginons que notre class User.cs accepte une liste de véhicules, alors il est possible de générer plusieurs véhicules comme ainsi :
.RuleFor(user => user.Vehicule, faker => newVehicule.Generate(3));

Gestion des langues avec Bogus
La grande puissance de Bogus est sa gestion des contraintes de globalizations et localizations. Dans les exemples ci-dessus, les utilisateurs sont par défaut issus du système de globalisation US. Si nous voulons changer la localisation, il suffit d’utiliser les constantes ci-dessous :
Bogus supports the following locales:
| Locale Code | Language | Locale Code | Language | |
|---|---|---|---|---|
af_ZA | Afrikaans | fr_CH | French (Switzerland) | |
ar | Arabic | ge | Georgian | |
az | Azerbaijani | hr | Hrvatski | |
cz | Czech | id_ID | Indonesia | |
de | German | it | Italian | |
de_AT | German (Austria) | ja | Japanese | |
de_CH | German (Switzerland) | ko | Korean | |
el | Greek | lv | Latvian | |
en | English | nb_NO | Norwegian | |
en_AU | English (Australia) | ne | Nepalese | |
en_AU_ocker | English (Australia Ocker) | nl | Dutch | |
en_BORK | English (Bork) | nl_BE | Dutch (Belgium) | |
en_CA | English (Canada) | pl | Polish | |
en_GB | English (Great Britain) | pt_BR | Portuguese (Brazil) | |
en_IE | English (Ireland) | pt_PT | Portuguese (Portugal) | |
en_IND | English (India) | ro | Romanian | |
en_NG | Nigeria (English) | ru | Russian | |
en_US | English (United States) | sk | Slovakian | |
en_ZA | English (South Africa) | sv | Swedish | |
es | Spanish | tr | Turkish | |
es_MX | Spanish (Mexico) | uk | Ukrainian | |
fa | Farsi | vi | Vietnamese | |
fi | Finnish | zh_CN | Chinese | |
fr | French | zh_TW | Chinese (Taiwan) | |
fr_CA | French (Canada) | zu_ZA | Zulu (South Africa) |
Rajoutons donc la constante fr pour la génération des données :
var newVehicule = new Faker<Vehicule>("fr")
.RuleFor(vehicule => vehicule.Vin, faker => faker.Vehicle.Vin())
.RuleFor(vehicule => vehicule.Model, faker => faker.Vehicle.Model())
.RuleFor(vehicule => vehicule.Motor, faker => faker.Vehicle.Fuel())
.RuleFor(vehicule => vehicule.Constructor, faker => faker.Vehicle.Manufacturer())
.RuleFor(vehicule => vehicule.Type, faker => faker.Vehicle.Type());
var newCustomer = new Faker<Customer>("fr")
.RuleFor(user => user.FirstName, faker => faker.Person.FirstName)
.RuleFor(user => user.LastName, faker => faker.Person.LastName)
.RuleFor(user => user.Address, faker => faker.Person.Address.Street)
.RuleFor(user => user.PostalCode, faker => faker.Person.Address.ZipCode)
.RuleFor(user => user.City, faker => faker.Person.Address.City)
.RuleFor(user => user.Country, faker => faker.Person.Address.State)
.RuleFor(user => user.Phone, faker => faker.Person.Phone)
.RuleFor(user => user.Region, faker => faker.Person.Address.State)
.RuleFor(user => user.Vehicule, faker => newVehicule.Generate(3));
Console.WriteLine(JsonSerializer.Serialize(newCustomer.Generate(4)));

Bogus gère énormément de domaine de données comme les adresses, le commerce, les véhicules, les dates, la finance, … Vous trouverez plus d’information dans ce lien.



