Master Test Data Generation with DataFaker in Spring Boot 3 – Real‑World Examples

This article introduces the open‑source DataFaker library for Java, shows how to add it to a Spring Boot 3.4.2 project, and provides step‑by‑step code examples for generating personal, address, collection, enum, SQL, CSV, and localized test data, including schema transformers and expression support.

Spring Full-Stack Practical Cases
Spring Full-Stack Practical Cases
Spring Full-Stack Practical Cases
Master Test Data Generation with DataFaker in Spring Boot 3 – Real‑World Examples

1. Introduction

High‑quality test data is essential for reliable software testing, yet manually crafted data often lacks realistic business semantics and is costly to maintain. The article presents DataFaker, a modern evolution of JavaFaker, designed for the JVM ecosystem (Java, Kotlin, Scala) and offering an extensive, extensible API.

2. Adding DataFaker to a Spring Boot Project

<dependency>
  <groupId>net.datafaker</groupId>
  <artifactId>datafaker</artifactId>
  <version>2.5.2</version>
</dependency>

2.1 Basic Usage

Faker faker = new Faker();
String fullName = faker.name().fullName();
System.err.printf("fullName: %s%n", fullName);
String firstName = faker.name().firstName();
System.err.printf("firstName: %s%n", firstName);
String username = faker.credentials().username();
System.err.printf("username: %s%n", username);
String password = faker.credentials().password();
System.err.printf("password: %s%n", password);
String email = faker.internet().emailAddress();
System.err.printf("email: %s%n", email);
String ipv4 = faker.internet().ipV4Address();
System.err.printf("ipv4: %s%n", ipv4);
String macAddress = faker.internet().macAddress();
System.err.printf("macAddress: %s%n", macAddress);
String phoneNumber = faker.phoneNumber().phoneNumber();
System.err.printf("phoneNumber: %s%n", phoneNumber);
String streetAddress = faker.address().streetAddress();
System.err.printf("streetAddress: %s%n", streetAddress);
String city = faker.address().city();
System.err.printf("city: %s%n", city);
String zipCode = faker.address().zipCode();
System.err.printf("zipCode: %s%n", zipCode);
String country = faker.address().country();
System.err.printf("country: %s%n", country);
String companyName = faker.company().name();
System.err.printf("companyName: %s%n", companyName);
String jobTitle = faker.job().title();
System.err.printf("jobTitle: %s%n", jobTitle);
DataFaker basic output
DataFaker basic output

2.2 Internationalization Support

Faker faker = new Faker(Locale.CHINA);
String fullName = faker.name().fullName();
System.err.printf("fullName: %s%n", fullName);
String firstName = faker.name().firstName();
System.err.printf("firstName: %s%n", firstName);
String username = faker.credentials().username();
System.err.printf("username: %s%n", username);

Running with Locale.CHINA yields Chinese‑style names such as:

fullName: 巫伟祺
firstName: 熠彤
username: 博文.戚

2.3 Random Enum Values

public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Faker faker = new Faker();
Options opt = faker.options();
Day day1 = opt.option(Day.class);
Day day2 = opt.option(Day.class);
System.err.printf("day1: %s, day2: %s%n", day1, day2);

Example output:

day1: FRIDAY, day2: SATURDAY

2.4 Generating Collections

Faker faker = new Faker(Locale.CHINA);
List<String> names = faker.collection(
    () -> faker.name().firstName(),
    () -> faker.name().lastName())
    .len(3, 5)
    .generate();
System.err.println(names);

Possible result:

[姬, 烨伟, 立轩, 狄]
List<Object> objects = faker.<Object>collection(
    () -> faker.name().firstName(),
    () -> faker.random().nextInt(100))
    .maxLen(5)
    .generate();
System.err.println(objects);

Possible result:

[89, 36, 56, 鸿煊, 伟泽]

2.5 Null‑Value Injection

List<Object> objects = faker.<Object>collection(
    () -> faker.name().firstName(),
    () -> faker.random().nextInt(100))
    .nullRate(0.3)
    .maxLen(5)
    .generate();

Running may produce:

[null, null, 73, 姣姣, 修杰]

2.6 Schema and Transformers

Define a schema that maps field names to data generators:

Faker faker = new Faker(Locale.CHINA);
Schema<String, String> schema = Schema.of(
    field("first_name", () -> faker.name().firstName()),
    field("last_name", () -> faker.name().lastName()),
    field("address", () -> faker.address().streetAddress()));

CSV output using CsvTransformer:

CsvTransformer<String> transformer = CsvTransformer.<String>builder()
    .header(true)
    .separator(",")
    .quote('\0')
    .build();
String csv = transformer.generate(schema, 10);
CSV transformer output
CSV transformer output

SQL output using SqlTransformer (MySQL dialect):

Schema<String, Object> schema = Schema.of(
    field("name", () -> faker.name().firstName()),
    field("age", () -> faker.number().numberBetween(1, 100)),
    field("phone", () -> faker.phoneNumber().phoneNumber()));
SqlTransformer<String> sqlTran = new SqlTransformer.SqlTransformerBuilder<String>()
    .batch(5)
    .tableName("t_user")
    .dialect(SqlDialect.MYSQL)
    .build();
String sql = sqlTran.generate(schema, 10);
System.err.println(sql);

Sample INSERT statements are produced, demonstrating how DataFaker can directly generate ready‑to‑run SQL scripts.

2.7 Expression Support

Faker faker = new Faker();
faker.expression("#{letterify 'test????test'}"); // → testqwastest
faker.expression("#{numerify '#test#'}"); // → 3test5
faker.expression("#{regexify '[a-z]{4,10}'}"); // → wbevoa
// JSON, CSV and other complex structures can also be generated via expressions.

3. Conclusion

DataFaker provides a powerful, type‑safe way to generate realistic test data for Java applications. It supports basic primitives, collections, localized data, schema‑driven transformations to CSV, SQL, JSON, and custom expressions, making it a valuable tool for backend developers working with Spring Boot.

Test Data GenerationLocalizationbackend-developmentspring-bootdatafakerschema-transformer
Spring Full-Stack Practical Cases
Written by

Spring Full-Stack Practical Cases

Full-stack Java development with Vue 2/3 front-end suite; hands-on examples and source code analysis for Spring, Spring Boot 2/3, and Spring Cloud.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.