Предположим, что если я хочу создать объект с поддельными данными для класса Person, вручную. Это займет слишком много времени, а класс Person внутри содержит класс Parties.
Есть ли простые способы создать объект с поддельными данными.
Используя mockito, мы можем создать объект, но опять же, вручную подделать данные сложно.
class Person {
int age;
ArrayList<Parties> parties;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public ArrayList<Parties> getParties() {
return parties;
}
public void setParties(ArrayList<Parties> parties) {
this.parties = parties;
}
}
class Parties {
private int date, month, year;
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}




Вы можете использовать java Faker:
<dependency>
<groupId>com.github.javafaker</groupId>
<artifactId>javafaker</artifactId>
<version>0.12</version>
</dependency>
Пример использования:
Faker faker = new Faker();
String name = faker.name().fullName(); // Miss Samanta Schmidt
String firstName = faker.name().firstName(); // Emory
String lastName = faker.name().lastName(); // Barton
String streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449
Сайт проекта: http://dius.github.io/java-faker/
Не совсем, вы просто пишете цикл для заполнения тех объектов, которые вам нужны.
Вам не нужно создавать данные Parties, если вы ориентируетесь на Person в своих тестах. Вы всегда можете написать так:
Mockito.doReturn(new ArrayList()).when(your-mocked-person-object.getParties());
Создавайте объект с поддельными данными без ручного вмешательства. Если я использую mockito, мне снова придется подделывать все обязательные поля. Вместо этого есть способы создать объект с поддельными данными.
Вот несколько приемов, которые часто используются для быстрых тестовых данных:
1) Создайте объект одного человека в качестве базы (вручную). Различные тесты нуждаются только в изменении части данных, например, при изменении фамилии и т. д.
2) Создайте утилиту генерации данных, например FakePersonCreator. Он может использовать комбинацию фиксированных строк и случайных данных. Напишите функцию, которая генерирует человека, и пусть тесты будут ее использовать.
3) Используйте реальные данные в качестве тестовых данных. Вы можете записать его из реального запуска программы и экспортировать в файл. Тогда у вас есть два варианта:
Прочтите тестовые данные из файла при тестовом запуске
Напишите утилиту, которая генерирует java-код, который строит тест. данные (лицо) согласно вашему файлу данных
4) Держите большую часть ваших тестовых данных (человек) пустыми. Каждый тест должен устанавливать только те поля, которые необходимо проверить.
5) Используйте фреймворк для имитации (например, Mockito), чтобы имитировать тестовые данные. Создавайте фиктивные объекты, которые возвращают только те поля, которые действительно необходимы для тестирования.
Наконец, я нашел решение для подделки данных объекта из класса с помощью библиотеки PODAM на Java без ручного взаимодействия.
Мы можем использовать библиотеку Podam для подделки данных для объекта.
Зависимость
<dependency>
<groupId>uk.co.jemos.podam</groupId>
<artifactId>podam</artifactId>
<version>7.1.0.RELEASE</version>
</dependency>
Код
PodamFactory factory = new PodamFactoryImpl();
Person myPojo = factory.manufacturePojo(Person.class);
Ссылка: PODAM
faker предназначен для создания поддельных данных, но для создания объекта с поддельными данными для класса требуется много ручного взаимодействия.