Todo desenvolvedor já passou por isso: você precisa testar uma API, popular um banco de dados ou rodar testes automatizados, mas não tem dados para usar. Copiar dados de produção é um risco enorme (LGPD, segurança), e criar registros na mão é improdutivo.
A solução é gerar dados fictícios realistas — também chamados de mock data ou fake data. Neste guia, vamos mostrar as melhores ferramentas e bibliotecas para isso, com exemplos práticos para cada situação.
Por Que Usar Dados Fictícios?
- Conformidade com a LGPD: dados reais de clientes nunca devem ser usados em ambientes de teste
- Reprodutibilidade: testes com dados fixos são mais previsíveis
- Velocidade: é muito mais rápido gerar 10.000 registros do que criá-los manualmente
- Cobertura: dados gerados podem simular edge cases (nomes longos, CEPs inválidos, etc)
Abordagem 1: Bibliotecas de Código (Faker.js)
O Faker.js (agora mantido como @faker-js/faker) é a biblioteca mais popular para gerar dados fictícios em JavaScript/TypeScript.
Instalação
npm install @faker-js/faker
Gerando dados básicos
import { faker } from '@faker-js/faker/locale/pt_BR';
// Gerar uma pessoa fictícia completa
const pessoa = {
nome: faker.person.fullName(),
email: faker.internet.email(),
telefone: faker.phone.number(),
cpf: faker.string.numeric(11),
nascimento: faker.date.birthdate({ min: 18, max: 65, mode: 'age' }),
endereco: {
rua: faker.location.street(),
cidade: faker.location.city(),
estado: faker.location.state(),
cep: faker.location.zipCode(),
}
};
console.log(pessoa);
Gerando dados em massa para popular um banco
import { faker } from '@faker-js/faker/locale/pt_BR';
function gerarUsuarios(quantidade) {
return Array.from({ length: quantidade }, () => ({
id: faker.string.uuid(),
nome: faker.person.fullName(),
email: faker.internet.email(),
telefone: faker.phone.number(),
criado_em: faker.date.past(),
ativo: faker.datatype.boolean(),
}));
}
// Gerar 500 usuários fictícios
const usuarios = gerarUsuarios(500);
console.log(`Gerados ${usuarios.length} usuários`);
Abordagem 2: Factory Pattern (Backend)
Em projetos maiores, o ideal é usar o padrão Factory para centralizar a criação de dados de teste.
Exemplo com TypeScript
interface Usuario {
id: string;
nome: string;
email: string;
role: 'admin' | 'user' | 'viewer';
}
class UsuarioFactory {
static criar(overrides: Partial<Usuario> = {}): Usuario {
return {
id: crypto.randomUUID(),
nome: 'João da Silva',
email: `user-${Date.now()}@teste.com`,
role: 'user',
...overrides,
};
}
static criarAdmin(overrides: Partial<Usuario> = {}): Usuario {
return this.criar({ role: 'admin', nome: 'Admin Teste', ...overrides });
}
static criarLote(quantidade: number): Usuario[] {
return Array.from({ length: quantidade }, () => this.criar());
}
}
// Uso em testes
const admin = UsuarioFactory.criarAdmin();
const usuarios = UsuarioFactory.criarLote(100);
Abordagem 3: Ferramentas Online (Sem Código)
Nem sempre você precisa escrever código. Para prototipação rápida ou testes manuais, ferramentas online são mais produtivas:
| Ferramenta | O Que Gera | Ideal Para |
|---|---|---|
| Pessoa Completa (DevThru) | Nome, CPF, RG, endereço, telefone | Cadastros de clientes |
| Mock Data (DevThru) | JSON/CSV com dados customizáveis | Popular bancos de dados |
| Gerador de CPF (DevThru) | CPFs válidos para teste | Formulários de cadastro |
| Gerador de CNPJ (DevThru) | CNPJs válidos para teste | Sistemas fiscais/ERP |
Abordagem 4: Seeding de Banco de Dados
Para popular um banco automaticamente durante o setup de testes ou desenvolvimento:
Exemplo com Prisma + Faker
// prisma/seed.ts
import { PrismaClient } from '@prisma/client';
import { faker } from '@faker-js/faker/locale/pt_BR';
const prisma = new PrismaClient();
async function main() {
// Limpa a base
await prisma.usuario.deleteMany();
// Seed com 100 usuários
for (let i = 0; i < 100; i++) {
await prisma.usuario.create({
data: {
nome: faker.person.fullName(),
email: faker.internet.email(),
telefone: faker.phone.number(),
ativo: true,
},
});
}
console.log('Seed concluído: 100 usuários criados');
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect());
Boas Práticas
- Nunca use dados reais: mesmo que "só sejam testes", o vazamento de dados de produção em ambientes de teste é uma violação da LGPD.
- Use seeds determinísticos: configure uma seed fixa no Faker (
faker.seed(123)) para que os testes sejam reproduzíveis. - Valide os dados gerados: se precisa de CPFs/CNPJs válidos, use geradores que implementem o algoritmo de módulo 11 — como as ferramentas do DevThru.
- Cubra edge cases: gere dados com nomes muito longos, caracteres especiais, e-mails duplicados, etc.
- Isole os ambientes: nunca rode seeds em banco de produção. Use variáveis de ambiente para proteger.
Perguntas Frequentes
Faker.js gera CPFs válidos?
Não por padrão. O faker.string.numeric(11) gera 11 dígitos aleatórios, mas sem calcular os dígitos verificadores. Para CPFs com validação matemática correta, use nosso Gerador de CPF.
Posso usar dados fictícios em testes de carga?
Sim, é a prática recomendada. Use o Faker.js para gerar milhares de registros e testar performance sem riscos legais.
Qual a diferença entre mock data e stub?
Mock data são dados fictícios usados para popular bancos ou payloads. Stubs são respostas fixas para simular comportamentos de APIs ou serviços externos durante testes unitários. São conceitos complementares.
🛠️ Experimente na prática
Use nossas ferramentas online gratuitas — sem cadastro, direto no navegador.
