Geração de Dados Fictícios em Go com Gofakeit: Tutorial Completo

A criação de dados de teste autênticos e representativos é crucial para assegurar a qualidade e o funcionamento adequado de suas aplicações. A capacidade de gerar dados fictícios que espelhem situações do mundo real é uma ferramenta valiosa para diversas formas de teste.

A biblioteca padrão não oferece recursos para a criação de dados falsos, mas o ecossistema Go disponibiliza uma variedade de pacotes para esse fim. Um pacote bastante conhecido para a geração de dados fictícios é o Gofakeit.

Iniciando com Gofakeit

Gofakeit é um pacote desenvolvido para gerar dados simulados em seus programas Go.

O Gofakeit oferece uma gama completa de funcionalidades, incluindo a geração aleatória de dados em variados tipos. Além disso, proporciona opções de personalização para aderir a formatos específicos, suporte para localização e a geração realista de data e hora.

Para adicionar Gofakeit como uma dependência externa, execute o seguinte comando no diretório de trabalho do seu projeto, após inicializar um novo projeto Go:

 go get github.com/brianvoe/gofakeit/v6

Após adicionar o Gofakeit como dependência, você pode importar o pacote da seguinte maneira:

 import (
	"github.com/brianvoe/gofakeit/v6"
)

Em geral, o Gofakeit fornece a maioria dos recursos esperados em um pacote de geração de dados simulados.

Gerando Dados Fictícios Básicos com Gofakeit

Gofakeit oferece funcionalidades para criar diversos tipos de dados, tais como nomes, e-mails, telefones, frases corporativas e outros.

Veja como gerar dados simulados básicos com Gofakeit:

 package main

import (
	"fmt"
	"github.com/brianvoe/gofakeit/v6"
)

func main() {
	
	name := gofakeit.Name()
	fmt.Println("Nome:", name)

	
	email := gofakeit.Email()
	fmt.Println("Email:", email)

	
	phone := gofakeit.Phone()
	fmt.Println("Telefone:", phone)

	
	company := gofakeit.Company()
	fmt.Println("Empresa:", company)

	
	creditCard := gofakeit.CreditCardNumber()
	fmt.Println("Cartão de Crédito:", creditCard)

	
	hackerPhrase := gofakeit.HackerPhrase()
	fmt.Println("Frase Hacker:", hackerPhrase)

	
	jobTitle := gofakeit.JobTitle()
	fmt.Println("Cargo:", jobTitle)

	
	currency := gofakeit.CurrencyShort()
	fmt.Println("Moeda:", currency)
}

A função principal produz diversos valores simulados utilizando o Gofakeit e os exibe no console através da função Println do pacote fmt.

O Gofakeit dispõe de tags struct para gerar dados fictícios para diversos campos. Ao utilizar essas tags, o Gofakeit preenche seus campos com dados simulados.

 import (
	"fmt"
	"time"

	"github.com/brianvoe/gofakeit/v6"
)

type Pessoa struct {
	ID        string    `fake:"{uuid}"`
	FirstName string    `fake:"{firstname}"`
	LastName  string    `fake:"{lastname}"`
	Age       int       `fake:"{number:18,60}"`
	Email     string    `fake:"{email}"`
	Address   string    `fake:"{address}"`
	CreatedAt time.Time `fake:"{date}"`
}

func main() {
	var pessoa Pessoa

	gofakeit.Struct(&pessoa)

	fmt.Printf("ID: %s\n", pessoa.ID)
	fmt.Printf("Nome: %s\n", pessoa.FirstName)
	fmt.Printf("Sobrenome: %s\n", pessoa.LastName)
	fmt.Printf("Idade: %d\n", pessoa.Age)
	fmt.Printf("Email: %s\n", pessoa.Email)
	fmt.Printf("Endereço: %s\n", pessoa.Address)
	fmt.Printf("Criado em: %s\n", pessoa.CreatedAt)
}

Todos os campos da struct Pessoa possuem tags de struct fake. Na função principal, a variável pessoa é uma instância da struct Pessoa.

O método gofakeit.Struct completa os elementos exportados de uma struct com dados aleatórios, baseando-se nos valores das tags fake dos campos exportados. A função principal, então, exibe os campos da struct no console.

Gerando Dados Fictícios Complexos

Você pode gerar dados simulados complexos com Gofakeit, incluindo frases aleatórias, parágrafos e texto lorem ipsum, utilizando as funções Sentença, Parágrafo e LoremIpsumParagraph, respectivamente.

 package main

import (
	"fmt"

	"github.com/brianvoe/gofakeit/v6"
)

func gerarFraseAleatoria() string {
	
	frase := gofakeit.Sentence(6)
	return frase
}

func gerarParagrafoAleatorio() string {
	
	paragrafo := gofakeit.Paragraph(3, 4, 8, "/n")
	return paragrafo
}

func gerarLoremIpsum() string {
	
	loremIpsum := gofakeit.LoremIpsumParagraph(3, 5, 12, "\\n")
	return loremIpsum
}

func main() {
	
	gofakeit.Seed(0)

	
	fmt.Println("Frase Aleatória:")
	fmt.Println(gerarFraseAleatoria())

	
	fmt.Println("\nParágrafo Aleatório:")
	fmt.Println(gerarParagrafoAleatorio())

	
	fmt.Println("\nTexto Lorem Ipsum:")
	fmt.Println(gerarLoremIpsum())
}

A função gerarFraseAleatoria gera uma frase aleatória usando a função Sentence do Gofakeit. A função gerarParagrafoAleatorio cria um parágrafo aleatório através da função Paragraph.

A função gerarLoremIpsum gera um parágrafo lorem ipsum aleatório com a função LoremIpsumParagraph.

A função principal invoca as funções gerarFraseAleatoria, gerarParagrafoAleatorio e gerarLoremIpsum. O programa exibe as saídas das funções no console.

Geração de Dados Fictícios para Testar seu Banco de Dados

O Gofakeit facilita os testes através da geração dinâmica de dados, assegurando a compatibilidade com diversos requisitos.

Você pode utilizar o pacote banco de dados/sql integrado do Go para popular seu banco de dados SQL com dados simulados para teste. Isso auxilia na avaliação de casos mais complexos e no aprimoramento da segurança do banco de dados.

Perguntas Frequentes

P: Como posso utilizar esses dados de teste fictícios?

Você deve elaborar testes de unidade e fornecer dados de teste simulados para verificar se pequenas partes combináveis do seu programa estão funcionando corretamente.

P: Quais outros pacotes de teste o Go oferece?

Go oferece um excelente suporte embutido através do seu pacote de testes. Com ele, você pode avaliar o código, usar fuzzing para variar seus dados de teste e organizar seus testes em uma hierarquia.

P: Qual a história por trás do Lorem Ipsum?

Lorem ipsum é um tipo comum de texto de preenchimento que desenvolvedores e designers frequentemente utilizam no lugar de texto real. É útil pois é considerado simulado, mas ainda se assemelha a um texto genuíno.