NBuilder .NET (jak to działa dla programistów)
NBuilder to biblioteka .NET upraszczająca generowanie danych testowych. Dzięki płynnemu interfejsowi programiści mogą bez wysiłku tworzyć złożone grafy obiektów. Zapewnia elastyczność, wydajność i płynną integrację z popularnymi frameworkami testowymi. W tym artykule omówimy funkcje NBuilder, sposób jego instalacji oraz zademonstrujemy jego możliwości na praktycznych przykładach kodu.

Funkcje NBuilder
- NBuilder to biblioteka .NET typu open source napisana w języku C#, zaprojektowana w celu uproszczenia tworzenia obiektów do testowania i symulacji. Pozwala to programistom na szybkie generowanie obiektów z danymi domyślnymi lub niestandardowymi w oparciu o różne typy danych.
- Jest to szczególnie przydatne w przypadku testów jednostkowych, testów funkcjonalnych i testów integracyjnych.
- Jest to jeden z niezbędnych pakietów do testowania wbudowanych typów danych .NET i złożonych obiektów.
- Służy do generowania danych losowych. Możesz wnieść swój wkład w ten projekt open source.
- Dzięki NBuilder możesz bez wysiłku nadpisywać domyślne właściwości i tworzyć własne konfiguracje.
Instalacja NBuilder
Aby zainstalować NBuilder w konsoli menedżera pakietów NuGet, użyj następującego polecenia.
Install-Package NBuilder
Powyższe polecenie zainstaluje NBuilder wraz ze wszystkimi jego zależnościami.

Zastosowanie NBuilder
NBuilder zapewnia płynny sposób tworzenia obiektów w locie. Zacznijmy od prostego przykładu tworzenia obiektu.
Oto kod źródłowy klasy Person Model.
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
Friend Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property Email() As String
Public Property IsMarried() As Boolean
End Class
Przykład 1: Tworzenie obiektu Person z wartościami domyślnymi
// Create a new person object with default values using NBuilder
var person = Builder<Person>
.CreateNew()
.Build();
// By default, NBuilder can provide values like
// Id = 1, Name = Name1, Email = Email1, IsMarried = false
// Create a new person object with default values using NBuilder
var person = Builder<Person>
.CreateNew()
.Build();
// By default, NBuilder can provide values like
// Id = 1, Name = Name1, Email = Email1, IsMarried = false
' Create a new person object with default values using NBuilder
Dim person = Builder(Of Person) .CreateNew().Build()
' By default, NBuilder can provide values like
' Id = 1, Name = Name1, Email = Email1, IsMarried = false
Przykładowy obrazek

Przykład 2: Tworzenie obiektów za pomocą niestandardowego Builders
Oto przykład wykorzystania NBuilder do utworzenia i skonfigurowania obiektu Person z niestandardowymi właściwościami:
// Initialize a custom builder for the Person object with specific values
var customPersonBuilder = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com");
// Build the custom person object with the specified properties
var objTom = customPersonBuilder.Build();
// Initialize a custom builder for the Person object with specific values
var customPersonBuilder = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com");
// Build the custom person object with the specified properties
var objTom = customPersonBuilder.Build();
' Initialize a custom builder for the Person object with specific values
Dim customPersonBuilder = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com")
' Build the custom person object with the specified properties
Dim objTom = customPersonBuilder.Build()
Powyższy kod tworzy nowy obiekt Person z niestandardowymi właściwościami. Inicjuje obiekt customPersonBuilder dla obiektu Person, ustawiając imię na "Tom", a adres e-mail na "Tom@email.com". Na koniec tworzy obiekt i przypisuje go do objTom.
Przykład 3: Tworzenie listy obiektów Person z wartością domyślną
// Create a list of 10 Person objects with default values using NBuilder
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
// Create a list of 10 Person objects with default values using NBuilder
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
' Create a list of 10 Person objects with default values using NBuilder
Dim personList = Builder(Of Person) .CreateListOfSize(10).Build()
Przykładowy obrazek

W tym przypadku personList zawiera 10 obiektów z wartościami domyślnymi i PRINTuje je.
// Creating a list of 10 Person objects with default values
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
// Print details of each Person object in the list
foreach (var person in personList)
{
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}");
}
// Creating a list of 10 Person objects with default values
var personList = Builder<Person>
.CreateListOfSize(10)
.Build();
// Print details of each Person object in the list
foreach (var person in personList)
{
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}");
}
' Creating a list of 10 Person objects with default values
Dim personList = Builder(Of Person) .CreateListOfSize(10).Build()
' Print details of each Person object in the list
For Each person In personList
Console.WriteLine($"{person.Id}, {person.Name}, {person.Email}, {person.IsMarried}")
Next person

Przykład 4: Dostosowywanie wygenerowanych obiektów
Czasami może zaistnieć potrzeba dostosowania tworzonych obiektów. Można również dostosować wartość obiektu za pomocą metody With().
// Customize properties for all Person objects in the list
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = "Kim")
.With(p => p.Email = "abc@email.com")
.With(p => p.IsMarried = false)
.Build();
// Customize properties for all Person objects in the list
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = "Kim")
.With(p => p.Email = "abc@email.com")
.With(p => p.IsMarried = false)
.Build();
' Customize properties for all Person objects in the list
Dim personList = Builder(Of Person) .CreateListOfSize(10).All().With(Sub(p) p.Name = "Kim").With(Sub(p) p.Email = "abc@email.com").With(Sub(p) p.IsMarried = False).Build()
Powoduje to utworzenie personList, gdzie dla każdego obiektu domyślne wartości są nadpisane na Name = "Kim", Email = "abc@email.com" oraz IsMarried = false.
Przykład 5: Tworzenie listy obiektów typu Person z realistycznymi danymi losowymi
Aby uzyskać realistyczne wartości danych w liście osób, można użyć biblioteki Faker Library .NET do generowania realistycznych danych.
// Creating a list of Person objects with random yet realistic values using Faker
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = Faker.Name.FullName())
.With(p => p.Id = Faker.RandomNumber.Next(20, 60))
.Build();
// Creating a list of Person objects with random yet realistic values using Faker
var personList = Builder<Person>
.CreateListOfSize(10)
.All()
.With(p => p.Name = Faker.Name.FullName())
.With(p => p.Id = Faker.RandomNumber.Next(20, 60))
.Build();
' Creating a list of Person objects with random yet realistic values using Faker
Dim personList = Builder(Of Person) .CreateListOfSize(10).All().With(Sub(p) p.Name = Faker.Name.FullName()).With(Sub(p) p.Id = Faker.RandomNumber.Next(20, 60)).Build()
Przykład 6: Tworzenie listy obiektów typu Person z danymi sekwencyjnymi
Czasami może zaistnieć potrzeba generowania obiektów zawierających dane sekwencyjne. NBuilder .NET ułatwia to dzięki metodzie Do.
// Creating a list of 10 sequential Person objects using NBuilder
var personList = Builder<Person>.CreateListOfSize(10)
.All()
.Do((p, i) => p.Id = 501 + i)
.Do((p, i) => p.Name = $"Person {i + 1}")
.Build();
// Creating a list of 10 sequential Person objects using NBuilder
var personList = Builder<Person>.CreateListOfSize(10)
.All()
.Do((p, i) => p.Id = 501 + i)
.Do((p, i) => p.Name = $"Person {i + 1}")
.Build();
' Creating a list of 10 sequential Person objects using NBuilder
Dim personList = Builder(Of Person).CreateListOfSize(10).All().Do(Sub(p, i) p.Id = 501 + i).Do(Sub(p, i) p.Name = $"Person {i + 1}").Build()
W tym przypadku metoda All() zapewnia, że kolejne operacje mają zastosowanie do wszystkich 10 obiektów typu Person utworzonych w pamięci. Metoda Do() wykonuje delegat Action na każdym obiekcie Person. Ta konfiguracja przypisuje właściwość Id sekwencyjnie, zaczynając od 501, i podobnie nazywa każdą osobę sekwencyjnie jako "Osoba 1" do "Osoba 10".

Przykład 7: NBuilder z testowaniem jednostkowym przy użyciu Xunit
NBuilder w środowisku .NET jest szeroko stosowany w środowiskach testowych, gdzie programiści muszą generować realistyczny i zróżnicowany zestaw danych do testów. Ułatwia to testowanie i konserwację złożonych obiektów, które pozwalają programistom definiować niestandardową logikę inicjalizacji przy użyciu wyrażeń lambda i funkcji delegujących, co jest przydatne dla osób zainteresowanych wydajnym i elastycznym generowaniem danych testowych.
Klasa modelowa i usługa do testowania jednostkowego
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
class PersonService
{
public string GetPersonEmail(Person person)
{
return person.Email;
}
}
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public bool IsMarried { get; set; }
}
class PersonService
{
public string GetPersonEmail(Person person)
{
return person.Email;
}
}
Friend Class Person
Public Property Id() As Integer
Public Property Name() As String
Public Property Email() As String
Public Property IsMarried() As Boolean
End Class
Friend Class PersonService
Public Function GetPersonEmail(ByVal person As Person) As String
Return person.Email
End Function
End Class
W tym przypadku klasa Person posiada kilka właściwości, takich jak Id, Name, Email oraz IsMarried, natomiast PersonService zawiera metodę GetPersonEmail(), która zwraca adres e-mail danego Person.
Klasy testowe i dane testowe
using Xunit;
public class PersonTests
{
[Fact]
public void GetPersonEmail_ReturnCorrectEmail()
{
// Arrange
var service = new PersonService();
string expectedEmail = "Tom@email.com";
// Create a person with specific name and email using NBuilder
var person = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com")
.Build();
// Act
var actualEmail = service.GetPersonEmail(person);
// Assert
Assert.Equal(expectedEmail, actualEmail);
}
}
using Xunit;
public class PersonTests
{
[Fact]
public void GetPersonEmail_ReturnCorrectEmail()
{
// Arrange
var service = new PersonService();
string expectedEmail = "Tom@email.com";
// Create a person with specific name and email using NBuilder
var person = Builder<Person>.CreateNew()
.With(p => p.Name = "Tom")
.With(p => p.Email = "Tom@email.com")
.Build();
// Act
var actualEmail = service.GetPersonEmail(person);
// Assert
Assert.Equal(expectedEmail, actualEmail);
}
}
Imports Xunit
Public Class PersonTests
<Fact>
Public Sub GetPersonEmail_ReturnCorrectEmail()
' Arrange
Dim service = New PersonService()
Dim expectedEmail As String = "Tom@email.com"
' Create a person with specific name and email using NBuilder
Dim person = Builder(Of Person).CreateNew().With(Sub(p) p.Name = "Tom").With(Sub(p) p.Email = "Tom@email.com").Build()
' Act
Dim actualEmail = service.GetPersonEmail(person)
' Assert
Assert.Equal(expectedEmail, actualEmail)
End Sub
End Class
Ten test jednostkowy sprawdza, czy metoda GetPersonEmail klasy PersonService poprawnie zwraca adres e-mail obiektu Person z oczekiwanym adresem "Tom@email.com". Wykorzystuje wzorzec Arrange-Act-Assert do skonfigurowania danych testowych, wykonania metody, a następnie sprawdzenia, czy rzeczywisty wynik jest zgodny z oczekiwanym.
Integracja NBuilder z IronPDF
Dowiedz się więcej o IronPDF – potężnej bibliotece C# przeznaczonej do tworzenia plików PDF z HTML w aplikacjach .NET. Dzięki intuicyjnemu interfejsowi API programiści mogą płynnie zintegrować funkcje PDF ze swoimi projektami, niezależnie od tego, czy generują faktury, raporty czy interaktywne formularze.

Instalacja IronPDF
Otwórz konsolę NuGet Package Manager i uruchom następujące polecenie:
Install-Package IronPdf
Wypełnij listę 5 obiektów typu Person
// Generating instances of the Person class with NBuilder
var people = Builder<Person>.CreateListOfSize(5).Build();
// Generating instances of the Person class with NBuilder
var people = Builder<Person>.CreateListOfSize(5).Build();
' Generating instances of the Person class with NBuilder
Dim people = Builder(Of Person).CreateListOfSize(5).Build()
Tworzenie dokumentu PDF przy użyciu IronPDF
Ten kod ustawia klucz licencyjny IronPDF i generuje zawartość HTML na podstawie listy obiektów Person.
// Setting the IronPDF license key
IronPdf.License.LicenseKey = "Your-License-Key";
// Building HTML content from Person object list
var htmlContent = "<h1>Person List</h1>";
foreach (var person in people)
{
htmlContent += $"<p>Id: {person.Id}, Name: {person.Name}, Email: {person.Email}, IsMarried: {person.IsMarried}</p>";
}
// Setting the IronPDF license key
IronPdf.License.LicenseKey = "Your-License-Key";
// Building HTML content from Person object list
var htmlContent = "<h1>Person List</h1>";
foreach (var person in people)
{
htmlContent += $"<p>Id: {person.Id}, Name: {person.Name}, Email: {person.Email}, IsMarried: {person.IsMarried}</p>";
}
' Setting the IronPDF license key
IronPdf.License.LicenseKey = "Your-License-Key"
' Building HTML content from Person object list
Dim htmlContent = "<h1>Person List</h1>"
For Each person In people
htmlContent &= $"<p>Id: {person.Id}, Name: {person.Name}, Email: {person.Email}, IsMarried: {person.IsMarried}</p>"
Next person
IronPdf.License.LicenseKey jest ustawiony z konkretnym kluczem licencyjnym, aby umożliwić korzystanie z funkcji IronPDF. Treść HTML jest tworzona dynamicznie poprzez iterację nad listą people, dołączając szczegóły każdego obiektu Person (Id, Name, Email, IsMarried) do struktury HTML.
Renderowanie listy osób w dokumencie PDF przy użyciu IronPDF
Ten kod konwertuje zawartość HTML na dokument PDF przy użyciu biblioteki ChromePdfRenderer firmy IronPDF.
// Rendering HTML content into a PDF document using IronPDF
var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
// Rendering HTML content into a PDF document using IronPDF
var renderer = new ChromePdfRenderer();
var pdfDoc = renderer.RenderHtmlAsPdf(htmlContent);
pdfDoc.SaveAs("PersonList.pdf");
' Rendering HTML content into a PDF document using IronPDF
Dim renderer = New ChromePdfRenderer()
Dim pdfDoc = renderer.RenderHtmlAsPdf(htmlContent)
pdfDoc.SaveAs("PersonList.pdf")
ChromePdfRenderer jest instancjonowany w celu renderowania treści HTML przechowywanej w htmlContent do dokumentu PDF. Powstały dokument PDF jest zapisywany w systemie plików pod nazwą "PersonList.pdf".
Wynik
Poniżej znajduje się wynik działania funkcji PersonList wygenerowany przez IronPDF. Zawiera pięć osób, z których każda ma wartości domyślne.

Wnioski
Podsumowując, NBuilder to solidne i elastyczne narzędzie do generowania danych testowych w środowisku .NET, usprawniające tworzenie złożonych grafów obiektów i zwiększające wydajność procesów testowania. Dzięki integracji z IronPDF programiści mogą w łatwy sposób rozszerzyć swoje aplikacje o funkcje generowania plików PDF dla tych, którzy uznają to za przydatne w swoich projektach. W połączeniu NBuilder i IronPDF mogą znacznie usprawnić procesy programistyczne, sprawiając, że testowanie i generowanie dokumentów przebiega płynnie i wydajnie.
Często Zadawane Pytania
Jak mogę wygenerować dane testowe używając NBuilder w .NET?
NBuilder zapewnia płynny interfejs, który pozwala deweloperom na bezwysiłkowe generowanie złożonych grafów obiektów i danych testowych. Możesz używać metod takich jak CreateNew() i CreateListOfSize(), aby wygenerować pojedyncze obiekty lub listy obiektów z domyślnymi lub niestandardowymi wartościami.
Jak zainstalować NBuilder w projekcie .NET?
Aby zainstalować NBuilder, możesz użyć konsoli menedżera pakietów NuGet z poleceniem: Install-Package NBuilder. To pobierze i zainstaluje NBuilder wraz z jego potrzebnymi zależnościami.
Czy NBuilder może być używany do generowania danych losowych i sekwencyjnych?
Tak, NBuilder obsługuje generowanie zarówno danych losowych, jak i sekwencyjnych. Możesz dostosować właściwości obiektów za pomocą metod takich jak With() dla wartości losowych lub użyć Do() do ustawiania właściwości sekwencyjnie.
Jakie są korzyści z integracji NBuilder z IronPDF?
Integracja NBuilder z IronPDF pozwala deweloperom na tworzenie złożonych danych testowych i ich eksportowanie jako pliki PDF. To może ulepszyć aplikacje .NET poprzez umożliwienie dynamicznego generowania PDF z danych testowych, upraszczając procesy rozwojowe.
Jak NBuilder pomaga w testach jednostkowych?
NBuilder jest cenny w testach jednostkowych, ponieważ pozwala deweloperom szybko generować realistyczne dane testowe. Upraszcza konfigurację scenariuszy testowych ze złożonymi grafami obiektów, co sprawia, że testy są bardziej pielęgnowalne i skuteczne.
Jaka jest zaleta korzystania z płynnego interfejsu w NBuilder?
Płynny interfejs w NBuilder pozwala deweloperom łączyć wywołania metod w celu tworzenia złożonych grafów obiektów w czytelny i zwięzły sposób. To poprawia klarowność kodu i redukuje redundantny kod przy generowaniu danych testowych.
Jak mogę stworzyć listę obiektów za pomocą NBuilder?
Możesz stworzyć listę obiektów, używając metody CreateListOfSize() z NBuilder. Na przykład, Builder generuje listę 10 obiektów Person.
Jakie są wskazówki dotyczące rozwiązywania problemów z NBuilder?
Upewnij się, że NBuilder jest poprawnie zainstalowany za pośrednictwem NuGet i zweryfikuj, że twoje referencje projektowe są aktualne. Jeśli napotkasz problemy, kontrola repozytorium GitHub NBuilder lub fora społeczności mogą dostarczyć przydatnych informacji i rozwiązań.




