Как применяются принципы SOLID в тестировании?

«Как применяются принципы SOLID в тестировании?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Принципы SOLID применимы к проектированию тестов для создания поддерживаемого и расширяемого кода.

S (Single Responsibility) – каждый тест должен проверять одну конкретную функциональность или сценарий. Это упрощает понимание причины падения теста. O (Open/Closed) – тестовый код должен быть открыт для расширения (добавления новых тестовых данных), но закрыт для модификации. Этого достигают через параметризованные тесты. L (Liskov Substitution) – моки (mocks) и стабы (stubs) должны корректно заменять реальные зависимости, не нарушая контракт. I (Interface Segregation) – тесты не должны зависеть от интерфейсов (или фикстур), которые они не используют. Следует создавать узкоспециализированные тестовые двойники. D (Dependency Inversion) – зависимости следует внедрять в тестируемый модуль извне (через конструктор или методы), что позволяет легко подменять их тестовыми двойниками.

Пример параметризованного теста (JUnit 5), соответствующего OCP:

@ParameterizedTest
@ValueSource(ints = {2, 4, 6, 8})
void isEven_ShouldReturnTrueForEvenNumbers(int number) {
    assertTrue(number % 2 == 0);
}

Такой подход позволяет добавлять новые тестовые данные, не изменяя код тестового метода.