JUnit тестирование сервис-слоя в spring-boot app и повторение кода

 
 
 
Сообщения:17
Всем привет.

Пишу тесты сервис-слоя и что-то не могу разобраться, как убрать повторение кода. У меня есть, к примеру, 3 сущности. CinemaSchema(схема мест кинотеатра), Cinema(кинотеатр) и Seance(сеанс). И соответствующие им сервис-слои.
Для тестирования класса SchemaService я в @BeforeClass создаю и сохраняю в базу 2 сущности CinemaSchema, затем в @AfterClass чищу базу.
Для тестирования класса CinemaService я опять создаю и сохраняю в базу 2 сущности CinemaSchema, а также 2 сущности Cinema ...
Для тестирования класса SeanceService я опять создаю и сохраняю в базу 2 сущности CinemaSchema, а также 2 сущности Cinema + 2 сущности Seance... и т.д.

Как мне избавиться от постоянно повторяющихся одинаковых фрагментов кода в каждом тестовом классе? Я думал решить этот вопрос с помощью @Rule, но рулы не для этого вроде.
Думал, использовать метод before из @BeforeClass из SchemaServiceTest в тестовом классе CinemaServiceTest в @BeforeClass, но пользоваться ссылками на статические переменные в другом тестовом классе это тоже неправильно...

Спасибо заранее за ответ.
 
 
Сообщения:9691
Нужно создать какую-то фабрику для создания корневого объекта и его ассоциаций. И переиспользовать ее везде где счас есть дублирование. Она должна быть достаточно универсальной чтоб подходить для большого кол-ва случаев. Я, бывает, такие фабричные методы прям в сами доменные сущности добавляю (хотя для этого есть другие причины). Вот простой пример:
public class Dog {
    ...
    public static Dog random() {
        Dog dog = new Dog();
        dog.name = alphanumeric(1, 100);
        dog.timeOfBirth = nullOr(yearAgo());

        dog.weight = positiveDouble();
        dog.height = positiveInteger();
        return dog;
    }
}
В тесте в таком случае создается универсальный объект и переопределяется то что интересно для данного теста.
Изменен:03 фев 2018 06:41
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет