Existe-t-il une bibliothèque Java qui aiderait à créer des instances de classes à tester ? Celui qui examine les propriétés d'un haricot et le remplit de données aléatoires. Je recherche essentiellement l'équivalent Java d' Object Hydrator pour C#.
Réponses
Trop de publicités?Jetez un œil à Easy Random .
Il vous permet de remplir un graphique d'objet Java avec des données aléatoires.
J'espère que ça aide.
Je ne connais pas de framework, mais c'est assez simple d'en écrire un vous-même. La complexité vient dans des propriétés non simples, alias des associations d'objets. Quelque chose comme ça gère les bases et puis certains :
public static void randomlyPopulateFields(Object object) {
new RandomValueFieldPopulator().populate(object);
}
public static class RandomValueFieldPopulator {
public void populate(Object object) {
ReflectionUtils.doWithFields(object.getClass(), new RandomValueFieldSetterCallback(object));
}
private static class RandomValueFieldSetterCallback implements FieldCallback {
private Object targetObject;
public RandomValueFieldSetterCallback(Object targetObject) {
this.targetObject = targetObject;
}
@Override
public void doWith(Field field) throws IllegalAccessException {
Class<?> fieldType = field.getType();
if (!Modifier.isFinal(field.getModifiers())) {
Object value = generateRandomValue(fieldType, new WarnOnCantGenerateValueHandler(field));
if (!value.equals(UNGENERATED_VALUE_MARKER)) {
ReflectionUtils.makeAccessible(field);
field.set(targetObject, value);
}
}
}
}
}
public static Object generateRandomValue(Class<?> fieldType, CantGenerateValueHandler cantGenerateValueHandler) {
if (fieldType.equals(String.class)) {
return UUID.randomUUID().toString();
} else if (Date.class.isAssignableFrom(fieldType)) {
return new Date(System.currentTimeMillis() - random.nextInt(DATE_WINDOW_MILLIS));
} else if (Number.class.isAssignableFrom(fieldType)) {
return random.nextInt(Byte.MAX_VALUE) + 1;
} else if (fieldType.equals(Integer.TYPE)) {
return random.nextInt();
} else if (fieldType.equals(Long.TYPE)) {
return random.nextInt();
} else if (Enum.class.isAssignableFrom(fieldType)) {
Object[] enumValues = fieldType.getEnumConstants();
return enumValues[random.nextInt(enumValues.length)];
} else {
return cantGenerateValueHandler.handle();
}
}
https://github.com/benas/random-beans a fait le travail pour moi, tandis que PoDam a échoué avec des setters "fluents" et la réponse de Ryan Stewart n'est pas complète pour le copier-coller, tout comme les références aux classes qui ne sont pas exposées ! Avec random-beans, c'est aussi simple que :
Auction auction = EnhancedRandom.random(Auction.class);
Gradle :
testCompile ('io.github.benas:random-beans:3.4.0')
Vous pouvez extraire le randomiseur pour la génération de données aléatoires. Cette bibliothèque permet de créer des données aléatoires à partir d'une classe de modèle donnée. Exécutez ci-dessous l'exemple de code.
public class Person {
@FirstName
String mFirstName;
@LastName
String mLastName;
@Number(min = 14,max = 25,decimals = 0)
int age;
@DateValue( from = "01 Jan 1990",to = "31 Dec 2002" , customFormat = "dd MMM yyyy")
String dateOfBirth;
@Email
String mEmailId;
@StreetAddress
public String streetAddress;
@State
public String state;
//Person can have minimum 1 Phone number and maximum 3 phone number
@Phone(country = Phone.Country.INDIA)
@CollectionDescriptor(min = 1,max = 3)
List<String> phones;
}
//Generate random 100 Person(Model Class) object
Generator<Person> generator = new Generator<>(Person.class);
List<Person> persons = generator.generate(100);
Comme de nombreux générateurs de données intégrés sont accessibles à l'aide d'annotations, vous pouvez également créer un générateur de données personnalisé. Je vous suggère de consulter la documentation fournie sur la page de la bibliothèque.