Nbuilder oraz Faker.NET – generowanie danych

Testując aplikację, potrzebujemy jakiś danych. Można oczywiście wszystko ręcznie przygotować, ale na dłuższą metę takie podejście jest dość problematyczne. Warto skorzystać z czegoś gotowego. Dzisiaj będę chciał Ci pokazać dwie biblioteki (Nbuilder oraz Faker.NET), które wykorzystuję do generowania danych testowych, a które w połączeniu dają całkiem fajne wyniki.

Nbuilder

Nbuilder (strona biblioteki) przydaje się, gdy potrzebujemy utworzyć jeden obiekt lub listę obiektów. Jego przydatność widać szczególnie w momencie, gdy tworzone obiekty mają wiele właściwości – ponieważ wypełnia danymi każdą z nich. W przypadku stringów dostajemy wartość [nazwawłaściwości][numer obiektu w kolekcji], liczby zawierają numer obiektu w kolekcji, typ logiczny na zmianę true/false, a data zawiera kolejne dni. Co fajne, utworzenie listy na przykład 1000 obiektów sprowadza się do jednej prostej linijki:

var users = Builder<User>.CreateListOfSize(10).Build();
view raw Program.cs hosted with ❤ by GitHub

A to w efekcie daje taki wynik:

NBuilder wynik działania biblioteki

NBuilder – wynik działania biblioteki

Działanie biblioteki można konfigurować i na przykład określić sposób wypełniania wartościami poszczególnych właściwości. Właśnie ta możliwość przyda się, aby połączyć NBuilder z drugą biblioteką z tego wpisu.

NBuilder niestety generuje dane dość generyczne, które w niektórych sytuacjach mogą być niepoprawne. Na przykład wartości wygenerowane dla właściwości Email będą wyglądały następująco: Email1, Email2, Email3…, które, jak widać, są niepoprawne.

Darmowy kurs Visual Studio

Pracując z setkami programistów, zauważyłem, że większość osób nie pracuje efektywnie w Visual Studio. W skrajnych przypadkach korzystali z kopiowania z wykorzystaniem menu Edit. Wiem, że to dziwne, ale naprawdę niektórzy tak pracują. Dlatego postanowiłem stworzyć kurs Visual Studio – aby pomóc koleżankom i kolegom w efektywniejszej pracy.

Przygotowałem 30 lekcji e-mail, w których pokażę Ci, w jaki sposób pracować efektywniej i szybciej w Visual Studio. Poznasz dodatki, bez których nie wyobrażam sobie pracy w tym IDE.

Po więcej informacji zapraszam na dedykowaną stronę kursu: Darmowy Kurs Visual Studio.

Quiz C#

Ostatnio przygotowałem również quiz C#, w którym możesz sprawdzić swoją wiedzę. Podejmiesz wyzwanie?

Faker.NET

Aby rozwiązać ten problem, wykorzystuję drugą bibliotekę – Faker.NET (strona biblioteki), która jest w stanie wygenerować dane dużo bardziej sensowne (niestety biblioteka wspiera tylko język angielski). Faker.NET to port rozwiązania z języka ruby, który umożliwia łatwe wygenerowanie kilkudziesięciu różnych typów danych – zaczynając od nazw użytkowników, imienia, nazwiska, po dane adresowe czy nawet testowe numery kart płatniczych.

W ramach przestrzeni nazw Faker jest kilka klas, które grupują powiązane metody do generowania danych. Na przykład aby wygenerować imię użytkownika, wystarczy skorzystać z poniższego fragmentu kodu:

var firstName = Faker.Name.First()
view raw Program2.cs hosted with ❤ by GitHub

Podobnie jest z innymi typami danych.

Wypełnienie bazy danymi

W swoich projektach łączę obie biblioteki, aby można było wygenerować dużą liczbę obiektów (NBuilder), które mają sensowne dane (Faker.NET). Do obsługi bazy danych na ogół wykorzystuję Entity Framework, który wspiera mechanizm migracji. W ramach tego mechanizmu możemy wykorzystać metodę Seed, która zostaje uruchomiona po wykonaniu migracji i za pomocą której możemy uzupełnić bazę danymi testowymi. Najlepiej zobaczyć to na przykładzie:

protected override void Seed(NugetForAspMvc.Models.DataContext context)
{
if (context.Users.Any() == false)
{
var users = Builder<User>.CreateListOfSize(20)
.All()
.With(u => u.Email = Faker.Internet.Email())
.With(u => u.FirstName = Faker.Name.First())
.With(u => u.LastName = Faker.Name.Last())
.With(u => u.UserName = Faker.Internet.UserName())
.Build();
foreach (var user in users)
{
context.Users.AddOrUpdate(u => u.Email, user);
}
}
}

Dzięki tym paru linijkom kodu mamy w miarę sensowne dane testowe. Poniżej znajduje się zrzut ekranu z rekordami z tabeli Users po uruchomieniu powyższego kodu.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.