7.9 KiB
Техническое задание: генератор случайных студентов
Задача
Реализовать класс для формирования MyList<Student> со случайными значениями.
По умолчанию ограничения диапазона для генерации не задаются. В таком случае значения должны генерироваться во всём допустимом диапазоне, установленном правилами класса Student.
Генерация объектов должна выполняться через существующий StudentBuilder.
Название класса
RandomStudentGenerator
Контракт класса
Класс должен хранить текущие ограничения генерации для каждого поля Student.
Для каждого поля необходимо предоставить по два метода: левое и правое ограничение.
groupNumber
Тип поля: String.
RandomStudentGenerator setMinGroupNumber(String minGroupNumber);
RandomStudentGenerator setMaxGroupNumber(String maxGroupNumber);
Ограничения применяются при генерации groupNumber.
Сравнение границ выполнять в соответствии с правилами, используемыми для groupNumber в Student.
averageGrade
Тип поля: double.
RandomStudentGenerator setMinAverageGrade(double minAverageGrade);
RandomStudentGenerator setMaxAverageGrade(double maxAverageGrade);
Диапазон должен быть включительным:
minAverageGrade <= averageGrade <= maxAverageGrade
recordBookNumber
Тип поля: int.
RandomStudentGenerator setMinRecordBookNumber(int minRecordBookNumber);
RandomStudentGenerator setMaxRecordBookNumber(int maxRecordBookNumber);
Диапазон должен быть включительным:
minRecordBookNumber <= recordBookNumber <= maxRecordBookNumber
Метод генерации
Основной метод:
MyList<Student> generate(int size);
Контракт:
- создаёт ровно
sizeобъектовStudent; - все объекты должны быть валидными;
- каждый объект создаётся через
StudentBuilder; - результат возвращается как
MyList<Student>; - стандартные
List,ArrayList,LinkedListи другие контейнеры использовать нельзя.
Поведение диапазонов по умолчанию
Если для поля ограничение не задано, используется весь допустимый диапазон этого поля.
Необходимо учитывать существующие ограничения Student, в частности:
averageGrade:
getMinAverageGrade()
getMaxAverageGrade()
recordBookNumber:
getMinRecordBookNumber()
Для groupNumber использовать существующий шаблон:
getGroupNumberPattern()
Генерируемое значение groupNumber должно соответствовать требованиям Student.
Проверка ограничений
При установке границ необходимо проверять их корректность.
Недопустимые случаи:
min > max
Для них выбрасывать:
IllegalArgumentException
Ограничение также не должно выходить за допустимые значения Student.
Рекомендуемая реализация
Класс должен хранить шесть ограничений:
minGroupNumber
maxGroupNumber
minAverageGrade
maxAverageGrade
minRecordBookNumber
maxRecordBookNumber
Для каждого поля значения генерируются независимо.
Рекомендуется использовать стандартный генератор случайных чисел Java, например:
Random
или:
ThreadLocalRandom
При создании Student:
сгенерировать поля
↓
StudentBuilder
↓
build()
↓
Student
↓
MyList<Student>
Дополнительную валидацию, дублирующую правила Student, в генераторе не реализовывать.
Примеры использования
Без настройки диапазонов:
RandomStudentGenerator generator =
new RandomStudentGenerator();
MyList<Student> students =
generator.generate(100);
С настройкой диапазонов:
RandomStudentGenerator generator =
new RandomStudentGenerator()
.setMinGroupNumber("A00")
.setMaxGroupNumber("Z99")
.setMinAverageGrade(3.0)
.setMaxAverageGrade(5.0)
.setMinRecordBookNumber(10000)
.setMaxRecordBookNumber(99999);
MyList<Student> students =
generator.generate(100);
Тесты
Генерация без ограничений
MyList<Student> result = generator.generate(100);
Проверить:
- размер равен
100; - все элементы не равны
null; - каждый
Studentвалиден.
Ограничение averageGrade
Задать:
3.0 — 4.0
Проверить, что все значения находятся в указанном диапазоне.
Ограничение recordBookNumber
Задать:
10000 — 20000
Проверить диапазон и включение границ.
Ограничение groupNumber
Задать левую и правую границы.
Проверить, что все сгенерированные значения находятся между ними согласно правилам сравнения groupNumber.
Граничные значения
Установить:
min == max
Проверить, что все сгенерированные значения равны указанной границе.
Некорректный диапазон
Проверить выброс IllegalArgumentException, если:
min > max
Некорректное ограничение
Передать диапазон, выходящий за допустимые значения Student.
Проверить выброс исключения.
Генерация пустой коллекции
Для:
generate(0)
ожидается пустой MyList<Student>.
Некорректный размер
Для отрицательного размера:
generate(-1)
ожидается IllegalArgumentException.
Результат
Необходимо реализовать:
RandomStudentGenerator.java
Класс должен использовать существующие:
Student.java
StudentBuilder.java
MyList.java
Изменять интерфейсы Student, StudentBuilder и MyList для выполнения данного задания не требуется.