Тестирование деталей реализации

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

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

Это усложняет сопровождение тестов

Представьте, что у вас есть следующая функция:

function multiply(x, y) {
  let total = 0;
  for (let i = 0; i < y; i++) {
    total = add(total, x);
  }
  return total;
}

function add(total, quantity) {
  return total + quantity;
}
Войти в полноэкранный режим Выход из полноэкранного режима

А затем у вас есть следующие тесты:

test("returns the correct result", () => {
  expect(multiply(5, 3)).toEqual(15);
});

test("calls the add function the correct number of times", () => {
  multiply(5, 3);
  expect(add).toHaveBeenCalledTimes(3);
});
Вход в полноэкранный режим Выход из полноэкранного режима

В первом тесте мы проверяем правильность вывода метода. Но во втором тесте мы проверяем детали реализации. Если кто-то позже придет и обновит нашу функцию до следующей:

function multiply(x, y) {
  return x * y;
}
Вход в полноэкранный режим Выход из полноэкранного режима

Первый тест все равно пройдет, но второй провалится. Функция по-прежнему работает нормально, вывод соответствует ожидаемому. Но нам все равно придется обновить тесты, потому что один из них возвращает ложноотрицательный результат.

Из-за этого мы не можем полагаться на наши тесты. Мы не можем с уверенностью сказать, был ли рефактор правильным или нет.

Мы должны тестировать наш код так, как его будут использовать другие пользователи. Если мы тестируем компонент React, мы должны проверить, что получит пользователь. Если это библиотека, то наши тесты должны быть похожи на то, как другие приложения будут ее использовать.

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

Должно быть легко понять, работает ли наш код после рефакторинга или нет.

Ресурсы

  • Тестирование деталей реализации
  • Почему иногда нужно тестировать «детали реализации»

Оцените статью
devanswers.ru
Добавить комментарий