-
Notifications
You must be signed in to change notification settings - Fork 235
Home
Easy Random is a library that generates random Java beans. Let's say you have a class Person and you want to generate a random instance of it, here we go:
EasyRandom easyRandom = new EasyRandom();
Person person = easyRandom.nextObject(Person.class);The method EasyRandom.nextObject is able to generate random instances of any given type.
The java.util.Random API provides 7 methods to generate random data: nextInt(), nextLong(), nextDouble(), nextFloat(), nextBytes(), nextBoolean() and nextGaussian().
What if you need to generate a random String? Or say a random instance of your domain object?
Easy Random provides the EasyRandom API that extends java.util.Random with a method called nextObject(Class type).
This method is able to generate a random instance of any arbitrary Java bean.
The EasyRandomParameters class is the main entry point to configure EasyRandom instances. It allows you to set all
parameters to control how random data is generated:
EasyRandomParameters parameters = new EasyRandomParameters()
.seed(123L)
.objectPoolSize(100)
.randomizationDepth(3)
.charset(forName("UTF-8"))
.timeRange(nine, five)
.dateRange(today, tomorrow)
.stringLengthRange(5, 50)
.collectionSizeRange(1, 10)
.scanClasspathForConcreteTypes(true)
.overrideDefaultInitialization(false)
.ignoreRandomizationErrors(true);
EasyRandom easyRandom = new EasyRandom(parameters);For more details about these parameters, please refer to the configuration parameters section.
In most cases, default options are enough and you can use the default constructor of EasyRandom.
Easy Random allows you to control how to generate random data through the org.jeasy.random.api.Randomizer interface
and makes it easy to exclude some fields from the object graph using a java.util.function.Predicate:
EasyRandomParameters parameters = new EasyRandomParameters()
.randomize(String.class, () -> "foo")
.excludeField(named("age").and(ofType(Integer.class)).and(inClass(Person.class)))
// set other parameters
.build();
EasyRandom easyRandom = new EasyRandom(parameters);
Person person = easyRandom.nextObject(Person.class);In the previous example, Easy Random will:
- Set all fields of type
Stringtofoo(using theRandomizerdefined as a lambda expression) - Exclude any field named
ageof typeIntegerin classPerson.
The static methods named, ofType and inClass are defined in org.jeasy.random.FieldPredicates
which provides common predicates you can use in combination to define exactly which fields to exclude.
A similar class called TypePredicates can be used to define which types to exclude from the object graph.
You can of course use your own java.util.function.Predicate in combination with those predefined predicates.
Populating a Java object with random data can look easy at first glance, unless your domain model involves many related classes.
In the previous example, let's suppose the Person type is defined as follows:
Without Easy Random, you would write the following code in order to create an instance of the Person class:
Street street = new Street(12, (byte) 1, "Oxford street");
Address address = new Address(street, "123456", "London", "United Kingdom");
Person person = new Person("Foo", "Bar", "foo.bar@gmail.com", Gender.MALE, address);And if these classes do not provide constructors with parameters (may be some legacy beans you can't change), you would write:
Street street = new Street();
street.setNumber(12);
street.setType((byte) 1);
street.setName("Oxford street");
Address address = new Address();
address.setStreet(street);
address.setZipCode("123456");
address.setCity("London");
address.setCountry("United Kingdom");
Person person = new Person();
person.setFirstName("Foo");
person.setLastName("Bar");
person.setEmail("foo.bar@gmail.com");
person.setGender(Gender.MALE);
person.setAddress(address);With Easy Random, generating a random Person object is done with easyRandom.nextObject(Person.class). The library will recursively populate
all the object graph. That's a big difference!
Easy Random is created by Mahmoud Ben Hassine with the help of some awesome contributors!