NBuilder .NET (Como funciona para desenvolvedores)
NBuilder é uma biblioteca .NET que simplifica a geração de dados de teste. Com sua interface intuitiva, os desenvolvedores podem criar grafos de objetos complexos sem esforço. Oferece flexibilidade, eficiência e integração perfeita com as estruturas de teste mais populares. Neste artigo, exploraremos os recursos do NBuilder, como instalá-lo e demonstraremos suas capacidades com exemplos práticos de código.

Funcionalidades do NBuilder
- NBuilder é uma biblioteca .NET de código aberto em C# projetada para simplificar a criação de objetos para fins de teste e simulação. Permite que os desenvolvedores gerem rapidamente objetos com entradas padrão ou personalizadas, com base em diferentes tipos de dados.
- É especialmente útil para testes unitários, testes funcionais e testes de integração.
- É um dos pacotes essenciais para testar tipos de dados nativos do .NET e objetos complexos.
- É utilizado para geração de dados aleatórios. Você pode contribuir para este projeto de código aberto.
- Com o NBuilder, você pode substituir facilmente as propriedades padrão e escrever configurações personalizadas.
Instalando o NBuilder
Para instalar o NBuilder no Console do Gerenciador de Pacotes NuGet , use o seguinte comando.
Install-Package NBuilder
O comando acima instalará o NBuilder com todas as suas dependências.

Utilização do NBuilder
O NBuilder oferece uma maneira fluida de criar objetos dinamicamente. Vamos começar com um exemplo simples de criação de um objeto.
Aqui está o código-fonte da classe do modelo Pessoa.
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
Exemplo 1: Criando um objeto Pessoa com valores padrão
// 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
Imagem de exemplo

Exemplo 2: Criando objetos com um construtor personalizado
Aqui está um exemplo de como usar o NBuilder para criar e configurar um objeto Pessoa com propriedades personalizadas:
// 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()
O código acima cria um novo objeto Pessoa com propriedades personalizadas. Inicializa um customPersonBuilder para um objeto Person, definindo o Nome como "Tom" e o Email como "Tom@email.com". Finalmente, ele constrói o objeto e o atribui a objTom.
Exemplo 3: Criando uma lista de objetos Pessoa com valor padrão
// 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()
Imagem de exemplo

Aqui, a lista personList contém 10 objetos com seus valores padrão e os imprime.
// 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

Exemplo 4: Personalizando objetos gerados
Às vezes, pode ser necessário personalizar os objetos que estão sendo criados. Você também pode personalizar o valor de um objeto usando o método 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()
Isso cria um personList com cada objeto tendo seu valor padrão substituído para Nome = "Kim", Email = "abc@email.com", e IsMarried = false.
Exemplo 5: Criando uma lista de objetos Pessoa com dados aleatórios realistas
Para obter valores de dados realistas na Lista de Pessoas, você pode usar a biblioteca Faker .NET para gerar dados realistas.
// 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()
Exemplo 6: Criando uma lista de objetos Pessoa com dados sequenciais
Existem momentos em que você pode precisar gerar objetos com dados sequenciais. O NBuilder .NET facilita isso usando o método 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()
Aqui, o método All() garante que as operações subsequentes se apliquem a todos os 10 objetos de pessoa criados na memória. O método Do() executa o delegado Action em cada objeto Person. Essa configuração atribui a propriedade Id sequencialmente a partir de 501 e, da mesma forma, nomeia cada pessoa sequencialmente como "Pessoa 1" até "Pessoa 10".

Exemplo 7: NBuilder com testes unitários usando Xunit
O NBuilder no .NET é amplamente utilizado em ambientes de teste, onde os desenvolvedores precisam gerar um conjunto de dados realista e diversificado para os testes. Isso facilita e simplifica a manutenção dos testes com objetos complexos, permitindo que os desenvolvedores definam lógica de inicialização personalizada usando expressões lambda e funções delegadas, atendendo àqueles interessados em geração de dados de teste eficiente e flexível.
Classe de modelo e serviço para teste de unidade
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
Aqui, a classe Person possui várias propriedades, como Id, Name, Email e IsMarried, enquanto PersonService contém um método GetPersonEmail() que retorna o e-mail de um determinado Person.
Classes de teste e dados de teste
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
Este teste unitário verifica se o método GetPersonEmail da classe PersonService retorna corretamente o endereço de e-mail de um objeto Person com o e-mail esperado "Tom@email.com". Ele utiliza o padrão Arrange-Act-Assert para configurar os dados de teste, executar o método e, em seguida, verificar se o resultado real corresponde ao resultado esperado.
Integrando o NBuilder com o IronPDF
Saiba mais sobre o IronPDF , uma poderosa biblioteca C# projetada para criar PDFs a partir de HTML em aplicativos .NET . Com sua API intuitiva, os desenvolvedores podem integrar facilmente a funcionalidade de PDF em seus projetos, seja para gerar faturas, relatórios ou formulários interativos.

Instalando o IronPDF
Abra o console do Gerenciador de Pacotes NuGet e execute o seguinte comando:
Install-Package IronPdf
Preencha a lista de 5 objetos do tipo Pessoa.
// 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()
Criação de documento PDF usando o IronPDF
Este código define a chave de licença do IronPDF e gera conteúdo HTML a partir de uma lista de objetos 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
O IronPdf.License.LicenseKey está configurado com uma chave de licença específica para habilitar os recursos do IronPDF. O conteúdo HTML é construído dinamicamente iterando sobre a lista people, anexando os detalhes de cada objeto Person (Id, Nome, Email, Casado) à estrutura HTML.
Renderizando a lista de pessoas em um documento PDF usando o IronPDF
Este código converte conteúdo HTML em um documento PDF usando o ChromePdfRenderer do 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")
O ChromePdfRenderer é instanciado para renderizar o conteúdo HTML armazenado em htmlContent em um documento PDF. O documento PDF resultante é salvo no sistema de arquivos com o nome "PersonList.pdf".
Saída
Abaixo está o resultado da lista de pessoas (PersonList) gerada pelo IronPDF. Contém cinco pessoas, cada uma com valores padrão.

Conclusão
Em resumo, o NBuilder é uma ferramenta robusta e flexível para gerar dados de teste em .NET, simplificando a criação de grafos de objetos complexos e aumentando a eficiência dos processos de teste. Ao integrar-se com o IronPDF, os desenvolvedores podem facilmente estender seus aplicativos para incluir recursos de geração de PDF para aqueles que consideram isso valioso para seus projetos. Em conjunto, o NBuilder e o IronPDF podem aprimorar significativamente os fluxos de trabalho de desenvolvimento, tornando os testes e a geração de documentos mais simples e eficientes.
Perguntas frequentes
Como posso gerar dados de teste usando NBuilder no .NET?
O NBuilder oferece uma interface fluente que permite aos desenvolvedores gerar grafos de objetos complexos e dados de teste sem esforço. Você pode usar métodos como CreateNew() e CreateListOfSize() para gerar objetos individuais ou listas de objetos com valores padrão ou personalizados.
Como faço para instalar o NBuilder em um projeto .NET?
Para instalar o NBuilder, você pode usar o Console do Gerenciador de Pacotes NuGet com o comando: Install-Package NBuilder . Isso fará o download e instalará o NBuilder juntamente com suas dependências necessárias.
O NBuilder pode ser usado para gerar dados aleatórios e sequenciais?
Sim, o NBuilder suporta a geração de dados aleatórios e sequenciais. Você pode personalizar as propriedades do objeto com métodos como With() para valores aleatórios ou usar Do() para definir propriedades sequencialmente.
Quais são os benefícios de integrar o NBuilder com o IronPDF?
A integração do NBuilder com o IronPDF permite que os desenvolvedores criem dados de teste complexos e os exportem como PDFs. Isso pode aprimorar aplicativos .NET, possibilitando a geração dinâmica de PDFs a partir de dados de teste e otimizando os fluxos de trabalho de desenvolvimento.
Como o NBuilder auxilia nos testes unitários?
O NBuilder é valioso em testes unitários, pois permite que os desenvolvedores gerem rapidamente dados de teste realistas. Ele simplifica a configuração de cenários de teste com grafos de objetos complexos, tornando os testes mais fáceis de manter e mais eficazes.
Qual a vantagem de usar uma interface fluente no NBuilder?
A interface fluente do NBuilder permite que os desenvolvedores encadeiem chamadas de métodos para criar grafos de objetos complexos de maneira legível e concisa. Isso aumenta a clareza do código e reduz a repetição de código na geração de dados de teste.
Como posso criar uma lista de objetos com NBuilder?
Você pode criar uma lista de objetos usando o método CreateListOfSize() do `NBuilder`. Por exemplo, Builder gera uma lista de 10 objetos Person .
Quais são algumas dicas de solução de problemas ao usar o NBuilder?
Certifique-se de que o NBuilder esteja instalado corretamente via NuGet e verifique se as referências do seu projeto estão atualizadas. Caso encontre problemas, consultar o repositório do NBuilder no GitHub ou os fóruns da comunidade pode fornecer informações e soluções úteis.




