Какие задачи выполняются на уровне компонентного (unit) тестирования?

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

Ответ

Компонентное (Unit) тестирование — это проверка отдельных изолированных модулей кода (функций, классов, компонентов UI) на корректность их внутренней логики.

Основные задачи:

  1. Проверка логики: Тестирование условных операторов, циклов, алгоритмов, преобразования данных.

    // Пример: тестирование функции-валидатора
    test('validateEmail returns true for correct email', () => {
      expect(validateEmail('test@example.com')).toBe(true);
    });
    test('validateEmail returns false for email without @', () => {
      expect(validateEmail('test.example.com')).toBe(false);
    });
  2. Проверка граничных условий и ошибочных сценариев: Работа с null, пустыми строками, крайними значениями.

    def test_divide_by_zero_raises_exception(self):
        calculator = Calculator()
        with self.assertRaises(ZeroDivisionError):
            calculator.divide(10, 0)
  3. Для UI-компонентов (React, Vue, Angular):

    • Рендеринг: Корректно ли отображается компонент с заданными пропсами/состоянием.
    • Взаимодействие: Корректно ли обрабатываются пользовательские события (клик, ввод).
    • Состояние: Корректно ли изменяется внутреннее состояние компонента.
      // React Testing Library пример
      test('Counter increments on button click', () => {
      const { getByText } = render(<Counter initialCount={0} />);
      const button = getByText('Increment');
      fireEvent.click(button);
      expect(getByText('Count: 1')).toBeInTheDocument();
      });

Инструменты и подход: Используются фреймворки (Jest, Mocha, Pytest) и библиотеки для мокирования (jest.fn, Sinon.JS, unittest.mock) для изоляции тестируемого модуля от внешних зависимостей (база данных, сетевые запросы).