Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/datafaker-net/datafaker
Generating fake data for the JVM (Java, Kotlin, Groovy) has never been easier!
https://github.com/datafaker-net/datafaker
faker testing
Last synced: 2 days ago
JSON representation
Generating fake data for the JVM (Java, Kotlin, Groovy) has never been easier!
- Host: GitHub
- URL: https://github.com/datafaker-net/datafaker
- Owner: datafaker-net
- License: apache-2.0
- Created: 2021-12-30T00:07:31.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-28T07:13:41.000Z (3 months ago)
- Last Synced: 2024-10-29T14:56:48.280Z (3 months ago)
- Topics: faker, testing
- Language: Java
- Homepage: https://www.datafaker.net
- Size: 14.5 MB
- Stars: 1,176
- Watchers: 21
- Forks: 170
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Datafaker
[![Maven Status](https://maven-badges.herokuapp.com/maven-central/net.datafaker/datafaker/badge.svg?style=flat)](http://mvnrepository.com/artifact/net.datafaker/datafaker)
[![License](http://img.shields.io/:license-apache-brightgreen.svg)](http://www.apache.org/licenses/LICENSE-2.0.html)
[![codecov](https://codecov.io/gh/datafaker-net/datafaker/branch/main/graph/badge.svg?token=FJ6EXMUTFD)](https://codecov.io/gh/datafaker-net/datafaker)This library is a modern fork of [java-faker](https://github.com/DiUS/java-faker) with up to date libraries and several newly added Fake Generators.
Datafaker 2.x has Java 17 as the minimum requirement.
*If Java 17 is not an option for you, you can choose to use Datafaker 1.x. Datafaker 1.x is built on Java 8, but this version is no longer maintained. We recommend all users to upgrade to Datafaker 2.x.*
This library generates fake data, similar to other fake data generators, such as:
* Ruby's [faker](https://github.com/stympy/faker) gem
* Perl's [Data::Faker](https://metacpan.org/pod/Data::Faker) library
* Python [faker](https://faker.readthedocs.io/en/master/) package
* PHP [faker](https://fakerphp.github.io/) library
* Javascript [Faker.js](https://github.com/faker-js/faker) libraryIt's useful when you're developing a new project and need some pretty data for showcase.
## Usage
In the pom.xml, add the following fragment to the `dependencies` section:
```xml
net.datafaker
datafaker
2.4.2```
For Gradle users, add the following to your build.gradle file.
```groovy
dependencies {
implementation 'net.datafaker:datafaker:2.4.2'
}```
You can also use the snapshot version (`2.4.3-SNAPSHOT`), which automatically gets published
after every push to the main branch of this repository. Binary repository URL for snapshots download is
`https://s01.oss.sonatype.org/content/repositories/snapshots/`.### Get started
In your Java code:
```java
Faker faker = new Faker();String name = faker.name().fullName(); // Miss Samanta Schmidt
String firstName = faker.name().firstName(); // Emory
String lastName = faker.name().lastName(); // BartonString streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449
```Or in your Kotlin code:
```kotlin
val faker = Faker()val name = faker.name().fullName() // Miss Samanta Schmidt
val firstName = faker.name().firstName() // Emory
val lastName = faker.name().lastName() // Bartonval streetAddress = faker.address().streetAddress() // 60018 Sawayn Brooks Suite 449
```JShell
```
# from project root folder
jshell --class-path $(ls -d target/*.jar | tr '\n' ':')
| Welcome to JShell -- Version 17.0.4
| For an introduction type: /help introjshell> import net.datafaker.Faker;
jshell> var faker = new Faker();
faker ==> net.datafaker.Faker@c4437c4jshell> faker.address().city();
$3 ==> "Brittneymouth"jshell> faker.name().fullName();
$5 ==> "Vernie Schmidt"
```### Expressions
```java
Faker faker = new Faker();
faker.expression("#{letterify 'test????test'}"); // testqwastest
faker.expression("#{numerify '#test#'}"); // 3test5
faker.expression("#{templatify 'test','t','q','@'}"); // @esq
faker.expression("#{examplify 'test'}"); // ghjk
faker.expression("#{regexify '[a-z]{4,10}'}"); // wbevoa
faker.expression("#{options.option '23','2','5','$','%','*'}"); // *
faker.expression("#{date.birthday 'yy DDD hh:mm:ss'}"); // 61 327 08:11:45
faker.expression("#{csv '1','name_column','#{Name.first_name}','last_name_column','#{Name.last_name}'}");
// "name_column","last_name_column"
// "Sabrina","Kihn"
faker.expression("#{json 'person','#{json ''first_name'',''#{Name.first_name}'',''last_name'',''#{Name.last_name}''}','address','#{json ''country'',''#{Address.country}'',''city'',''#{Address.city}''}'}");
// {"person": {"first_name": "Barbie", "last_name": "Durgan"}, "address": {"country": "Albania", "city": "East Catarinahaven"}}
```
also more examples at https://www.datafaker.net/documentation/expressions/### Collections
```java
Faker faker = new Faker();
List names = faker.collection(
() -> faker.name().firstName(),
() -> faker.name().lastName())
.len(3, 5)
.generate();
System.out.println(names);
// [Skiles, O'Connell, Lorenzo, West]
```
more examples about that at https://www.datafaker.net/documentation/sequences/### Streams
```java
Faker faker = new Faker();
// generate an infinite stream
Stream names = faker.stream(
() -> faker.name().firstName(),
() -> faker.name().lastName())
.generate();
```### Formats
#### Schema
There are 2 ways of data generation in specific formats
1. Generate it from scratch
2. There is already a sequence of objects and we could extract from them some values and return it in specific formatFor both cases we need a `Schema` which could describe fields and a way of data generation.
In case of generation from scratch `Suppliers` are enough, in case of transformation `Functions` are required
#### CSV```java
// transformer could be the same for both
CsvTransformer transformer =
CsvTransformer.builder().header(true).separator(",").build();
// Schema for from scratch
Schema fromScratch =
Schema.of(field("firstName", () -> faker.name().firstName()),
field("lastname", () -> faker.name().lastName()));
System.out.println(transformer.generate(fromScratch, 2));
// POSSIBLE OUTPUT
// "first_name" ; "last_name"
// "Kimberely" ; "Considine"
// "Mariela" ; "Krajcik"
// ----------------------
// Schema for transformations
Schema schemaForTransformations =
Schema.of(field("firstName", Name::firstName),
field("lastname", Name::lastName));
// Here we pass a collection of Name objects and extract first and lastnames from each element
System.out.println(
transformer.generate(
faker.collection(faker::name).maxLen(2).generate(), schemaForTransformations));
// POSSIBLE OUTPUT
// "first_name" ; "last_name"
// "Kimberely" ; "Considine"
// "Mariela" ; "Krajcik"
```#### JShell
```
# from project root folder
jshell --class-path $(ls -d target/*.jar | tr '\n' ':')
| Welcome to JShell -- Version 17.0.4
| For an introduction type: /help introjshell> import net.datafaker.Faker;
jshell> import net.datafaker.providers.base.Name;
jshell> import net.datafaker.transformations.Schema;
jshell> import net.datafaker.transformations.CsvTransformer;
jshell> import static net.datafaker.transformations.Field.field;
jshell> var faker = new Faker();
faker ==> net.datafaker.Faker@c4437c4jshell> Schema fromScratch =
...> Schema.of(field("firstName", () -> faker.name().firstName()),
...> field("lastname", () -> faker.name().lastName()));
fromScratch ==> net.datafaker.transformations.Schema@306a30c7jshell> CsvTransformer transformer =
...> CsvTransformer.builder().header(false).separator(",").build();
transformer ==> net.datafaker.transformations.CsvTransformer@506c589ejshell> System.out.println(transformer.generate(fromScratch, 2));
"firstName","lastname"
"Darcel","Schuppe"
"Noelle","Smitham"
```#### JSON
```java
Schema schema = Schema.of(
field("firstName", () -> faker.name().firstName()),
field("lastName", () -> faker.name().lastName())
);JsonTransformer transformer = JsonTransformer.builder().build();
String json = transformer.generate(schema, 2);
// [{"firstName": "Oleta", "lastName": "Toy"},
// {"firstName": "Gerard", "lastName": "Windler"}]
```
More complex examples and other formats like YAML, XML could be found at https://www.datafaker.net/documentation/formats/### Unique Values
```java
Faker faker = new Faker();// The values returned in the following lines will never be the same.
String firstUniqueInstrument = faker.unique().fetchFromYaml("music.instruments"); // "Flute"
String secondUniqueInstrument = faker.unique().fetchFromYaml("music.instruments"); // "Clarinet"
```
More examples can be found in https://www.datafaker.net/documentation/unique-values### Custom provider
Add your own custom provider in your app following steps from https://www.datafaker.net/documentation/custom-providers/
Documentation
-----
[Getting started](https://www.datafaker.net/documentation/getting-started/).Contributions
-------------
See [CONTRIBUTING.md](https://github.com/datafaker-net/datafaker/blob/main/CONTRIBUTING.md)If this is your first time contributing then you may find it helpful to read [FIRST_TIME_CONTRIBUTOR.md](https://github.com/datafaker-net/datafaker/blob/main/FIRST_TIME_CONTRIBUTOR.md)
Providers
-----
The list below is not complete and shows only a part of available providers. To view the full list of providers, please follow the link: [Full list of providers](https://www.datafaker.net/documentation/providers/).* Address
* Ancient
* Animal
* App
* Appliance
* Aqua Teen Hunger Force
* Artist
* Australia
* Avatar
* Aviation
* AWS
* Azure
* Babylon 5
* Back To The Future
* Barcode
* Baseball
* Basketball
* Battlefield 1
* Beer
* Big Bang Theory
* Blood Type
* Boardgame
* Bojack Horseman
* Book
* Bool
* Bossa Nova
* Brand
* Breaking Bad
* Brooklyn Nine-Nine
* Buffy
* Business
* CNPJ ([Brazilian National Registry of Legal Entities](https://en.wikipedia.org/wiki/CNPJ))
* CPF ([Brazilian individual taxpayer registry identification](https://en.wikipedia.org/wiki/CPF_number))
* Camera
* Cat
* Chuck Norris
* Clash of Clans
* Code
* Coin
* Color
* Commerce
* Community
* Company
* Compass
* Computer
* Control
* Country
* Credit Card Type
* Cricket
* Crypto
* Currency
* Date and Time
* DC Comics
* Demographic
* Departed
* Dessert
* Device
* Disease
* Doctor Who
* Dog
* Domain
* Doraemon
* Dota 2
* Dragon Ball
* Driving License
* Dumb and Dumber
* Dune
* Durations
* Educator
* Elden Ring
* Elder Scrolls
* Electrical Components
* Emoji
* England Football
* Esports
* Fallout
* Family Guy
* Famous Last Words
* File
* Final Space
* Finance
* Food
* Formula 1 (:racing_car:)
* Friends
* Fullmetal Alchemist: Brotherhood
* Funny Name
* Futurama
* Game Of Thrones
* Garment Size
* Gender
* Ghostbusters
* Grateful Dead
* Greek Philosopher
* Hacker
* Harry Potter
* Hashing
* Hearthstone
* Heroes of the Storm
* Hey Arnold
* Hipster
* Hitchhiker's Guide To The Galaxy
* Hobbit
* Hobby
* Horse
* House
* How I Met Your Mother
* IdNumber
* Industry Segments
* Internet
* Job
* Joke
* K-pop (Korean popular music)
* Kaamelott
* Language Code
* League Of Legends
* Lebowski
* Locality
* Lord Of The Rings
* Lorem
* Marketing
* Marvel Snap
* Mass Effect
* Matz
* MBTI
* Measurement
* Medical
* Military
* Minecraft
* Money
* Money Heist
* Mood
* Mountaineering
* Mountains
* Movie
* Music
* Name
* Naruto
* Nation
* Nato Phonetic Alphabet
* Nigeria
* Number
* One Piece
* Options
* Oscar Movie
* Overwatch
* Passport
* Password
* Phone Number
* Photography
* Planet
* Pokemon
* Princess Bride
* Programming Language
* Red Dead Redemption 2
* Relationship Terms
* Resident Evil
* Restaurant
* Rick and Morty
* Robin
* Rock Band
* RuPaul's Drag Race
* Science
* Seinfeld
* Shakespeare
* Silicon Valley
* Simpsons
* Sip
* Size
* Slack Emoji
* Soul Knight
* Space
* StarCraft
* StarTrek
* Stock
* Studio Ghibli
* Subscription
* Super Mario
* Superhero
* Tea
* Team
* The IT Crowd
* Time
* Touhou
* Tron
* Twin Peaks
* University
* Vehicle
* Verb
* Volleyball
* Weather
* Witcher
* Yoda
* ZeldaUsage with Locales
-----```java
Faker faker = new Faker(new Locale("lang", "COUNTRY"));
```For example:
```java
String californiaZipCode = new Faker(new Locale("en", "US")).address().zipCodeByState("CA");
String albanianIdNumber = new Faker(new Locale("sq", "AL")).idNumber().valid();
String moldovanPhone = new Faker(new Locale("ru", "MD")).phoneNumber().cellPhone();
```Note that most of the data depends on language,
but some data depends purely on country (personal ID and phone numbers).
In the example above,
* "en", "sq", "ru" are language codes (English, Albanian and Russian), and
* "US", "AL", "MD" are country codes (USA, Albanian and Moldova)Supported Locales
-----
* ar (Armenian)
* be_BY (Belarusian)
* bg_BG (Bulgarian)
* ca_CA
* ca-CAT
* cs_CZ (Czech republic)
* da-DK
* de
* de-AT
* de_CH (country: Switzerland, language: German)
* el-GR
* en
* en-AU
* en-au-ocker
* en-BORK
* en-CA
* en-GB
* en-IN (India)
* en-MS
* en-NEP
* en-NG
* en-NZ
* en-PAK
* en-SG
* en-UG
* en-US
* en-ZA
* en-PH
* es-AR (Argentine)
* es_ES (Spain)
* es-MX (Mexican)
* et_EE (Estonian)
* fa
* fi-FI
* fr_FR (French)
* fr_CH (country: Switzerland, language: French)
* ge_GE (Georgia)
* he_IL (language: Hebrew, country: Israel)
* hr_HR (Croatian)
* hu_HU (Hungarian)
* hy_AM (Armenian)
* in-ID (Indonesia)
* it
* ja
* ka
* ko
* mk_MK (North Macedonia)
* nb-NO
* nl
* pl
* pt
* pt-BR
* ro_MD (country: Moldova, language: Moldavian a.k.a. Romanian)
* ru_RU (Russian)
* sk_SK (Slovak)
* sq_AL (Albanian)
* sv
* sv-SE
* ta (Tamil)
* tr
* th_TH (Thailand)
* uk
* vi
* zh_CN (Chinese)
* zh-TWNATIVE IMAGE
------------Since version 2.4.1, Datafaker provides **experimental** native-image support.
This is done by providing a `reachability-metadata.json` file in the META-INF directory.This file is currently created manually by running all the unit tests, and having an agent collect tracing info:
```
-agentlib:native-image-agent=config-output-dir=src/main/resources/META-INF/native-image
```Future enhancements should automate and improve this process, but if you encounter any unexpected behaviour,
feel free to report an issue.An example usage of this can be found here: https://github.com/datafaker-net/datafaker-native-demo
LICENSE
-------
Copyright (c) 2025 Datafaker.net See the LICENSE file for license rights and limitations.