Тестовые классы с обычным поведением

Мне нужно написать несколько классов интеграционных тестов в 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());

Если я этого не сделаю, в тестовых классах будет много дублирования.

Я сомневаюсь, что это приемлемо, потому что абстрактный класс имеет тенденцию быть длинным и богатым на методы, или мне нужно изменить дизайн. Я хотел бы избежать создания отдельных классов для каждой группы констант.

2 ответа

Решение

Я думаю, что вполне нормально использовать базовый тестовый класс для вашего общего кода, а затем расширять его в каждом из тестовых классов. Фактически стратегия тестирования должна соответствовать дизайну кода проекта. Я уверен, что ваш модуль проекта также будет иметь некоторый общий код, ваш общий раздел тестирования в основном соответствует функциональности кода проекта.

Я сделал аналогичный дизайн в нескольких проектах без каких-либо проблем.

Таким образом, всякий раз, когда в вашем проекте изменяется общая функциональность, это влияет на контрольный пример в общем классе тестирования, в то время как конкретные изменения связаны с определенным классом тестирования.

Как насчет создания его как BaseTest абстрактный класс (как и ваш AbstractTest) со всеми необходимыми функциями, которые понадобятся вам во всех ваших тестах. Затем вы можете просто расширить свой абстрактный класс для наследования всех его свойств и написать любую дополнительную функциональность на основе ваших конкретных тестов. Что-то вроде DefaultUserTest extends BaseTest { protected UserModel createDefaultUser() {} }

Другие вопросы по тегам