Хотя я заметил, что этот пост может быть немного старым, у меня просто возникла такая же необходимость, и ни одно из представленных решений, казалось бы, не решило его приемлемо, поэтому я сделал несколько быстрых и грязных пятнадцатиминутных не совсем универсальный служебный метод для генерации случайно заполненных bean-компонентов, который может или не может быть полезен для кого-то, у кого похожая проблема:
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Random;
import org.springframework.beans.BeanUtils;
public class RandomBeanUtil {
public static <T> Collection<T> generateTestData(Class<T> clazz, int quantity) {
Collection<T> list = new ArrayList<T>();
PropertyDescriptor[] descriptors = BeanUtils.getPropertyDescriptors(clazz);
Random rand = new Random();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
try {
for (int i = 0; i != quantity; i++) {
T o = clazz.newInstance();
for (PropertyDescriptor descriptor : descriptors) {
Class<?> type = descriptor.getPropertyType();
if (String.class.isAssignableFrom(type)) {
descriptor.getWriteMethod().invoke(o, String.valueOf(new char[]{
(char)('A' + rand.nextInt(26)), (char)('a' + rand.nextInt(26)) }));
} else if (Date.class.isAssignableFrom(type)) {
cal.add(Calendar.DATE, rand.nextInt(60) - 30);
descriptor.getWriteMethod().invoke(o, cal.getTime());
} else if (BigDecimal.class.isAssignableFrom(type)) {
descriptor.getWriteMethod().invoke(o,
new BigDecimal(rand.nextDouble() * 500).setScale(2, RoundingMode.HALF_UP));
}
}
list.add(o);
}
} catch (Exception e) {
// TODO: Improve exception handling
throw new RuntimeException("Error while generating the bean collection", e);
}
return list;
}
}