Мне нужно написать некоторые классы тестов интеграции в Hybris Commerce Suite, и большинство из них имеют общее поведение для настройки системы (сайт, магазин, каталог, страна или ...) или для выполнения некоторые общие действия, такие как создание клиента.Тестовые классы с общим поведением
Я создал абстрактный класс, который выполняет всю инициализацию с постоянными значениями в методе @Before и с некоторыми распространенными методами, такими как createDefaultCustomer().
Все мои тестовые классы наследуются от этого класса.
постоянных значений разделены в различных постоянных классах, как
abstract class AbstractTest {
protected static final class USER_CONSTANTS {
};
protected static final class CATALOG_CONSTANTS {
};
protected UserModel createDefaultUser() {
}
}
Теперь для того, чтобы проверить, в моих подклассах я могу сделать
createDefaultUser();
UserData userData = userFacade.getUserById(USER_CONSTANTS.ID);
assertEquals(USER_CONSTANTS.ID, userData.getId());
Если я не делаю этого есть много дублирования в тестовых классах.
Мое сомнение в том, приемлемо ли это, потому что абстрактный класс имеет тенденцию быть длинным и богатым методами или мне нужно изменить дизайн. Я бы избегал создания отдельных классов для каждой группы констант.
В коде проекта все значения данных сохраняются в базе данных, и модуль может вызывать сервисы (например, UserService, ProductService ...) для получения моделей и выполнения некоторой логики. Я пытаюсь «имитировать» эту базу данных, потому что, если я помещаю реальные данные, чем тест, слишком зависимый от данных и менее гибкий – Vincenzo