Brincando com GenFu .NET Core
Tags: dotnet, testing, csharp, xunit
Published: 2020-07-20 14:36:38

Fala pessoal, muitas vezes necessitamos criar massa de dados para nossos testes, como não queremos reinventar a roda e fazer isto manualmente, procuramos uma biblioteca que faça isto por nós.
Existem vários pacotes excelentes para esse propósito, uma das minhas preferidas o é o **GenFu**.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/tfl9wswrcfau7tviphtl.png)

GenFu é uma excelente biblioteca para geração de massa de dados, na qual, você pode preencher propriedades de sua classe de forma dinamica e muito simples, fazendo o bom uso do padrão de projeto Builder.

## Instalando o GenFu.

O **GenFu** é compativel com O .NET 4.5, .NET 4.6 e .NETStardard 1.6 ou superior.

```
Install-Package GenFu
```
**.NET Core**
```
dotnet add package GenFu
```

## Utilizando GenFu

Existem 2 configurações bem simples e rápidas para geração de dados utilizando o **GenFu** que são:
```
var reuniao = A.New<Reuniao>();
var reunioes = A.ListOf<Reuniao>(20);
```

A primeira cria uma nova instancia com dados da classe Reuniao, e a segunda linha cria uma coleção de 20 registros da classe Reuniao com dados, veja os dados gerados abaixo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/po4iscut0d362tjzrrf3.png)

Como vocês podem perceber foi gerada a lista com 20 registros de Reunião, porém, elas estão com dados um pouco distante da realidade, e nós queremos que nossos dados estejam o mais proxímos possível do real, para isto, o **GenFu**, possuí, um Setup bem fácil e fluente que nos possibilita realizar a configuração das suas propriedades, veja o exemplo abaixo das configurações em 2 métodos:

{% gist https://gist.github.com/juniorporfirio/17b010f063f5d8dcae1773cf665b200d file=ReuniaoTeste.cs %}

**Atenção: Está configuração de Setup deve ser feita antes de chamar os métodos New ou ListOf do GenFu, para que ele possa utilizar está configuração: ** ;)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/7e5wq2bmko5ouh8gmeo2.png)

Como vocês podem visualizar na imagem acima, os registros foram criados baseados nas configurações pré definidas, de maneira bem legal e simples, possibilitando a criação de valores, como nomes, e-mails, telefones, redes sociais, outras coleções e muito mais !!!

## Customizando GenFu

Uma outra coisa bacana que o **GenFu** oferece, é a possibilidade de customizar configurações de forma bem simples, utilizando o nome da propriedade como base para o uso do método Filler. Veja abaixo um exemplo, no qual estamos customizando a geração de dados de WebSites.

{% gist https://gist.github.com/juniorporfirio/0645d5eac7074eb39021e3510328082c file=WebSiteFiller.cs %}

Como podemos visualizar acima, nós definimos as tags, website, site, web, webaddress, url com chaves para geração de dados, e no método GetValue nós já utilizamos um padrão de geração de dominios existente e adicionamos o https e www.
Para aplicar essa configuração basta, informar a seguinte configuração:

```
A.Default().FillerManager.RegisterFiller(new WebsiteFiller());
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/y1top3ene6ttt0if6dik.png)

Ao Executar nossos testes, podemos perceber que foi preenchido corretamente o Filler personalizado que definimos.

## Conclusão
O **GenFu** é um excelente package que pode te auxiliar a geração de dados seja para seus testes ou aplicação que deseje realizar validação de massa de dados de forma simples e rápida, com uma linguagem simples e fluente.

Não deixe de ver nas referências o código fonte dos códigos demonstrados neste post.

Abraços !!

## Referências

{% github https://github.com/juniorporfirio/GenFu-Example %}
{% github https://github.com/MisterJames/GenFu %}