воскресенье, 20 марта 2022 г.

Как лучше делать тесты: сценарии "Обыденным языком" или "Конфигурации входных параметров"?"


Текст на картинке: "Что это за куча тестов? Что они проверяют? Для кого предназначены все эти описания?"
Это комментарий к одному из моих изменений на github, когда я работал по курсу React, см HT2 - IgnatovDan

Совершенно справедливый комментарий от человека, который <всегда делал тесты "по другому" />

describe('Product', () => {
  it('should render', () => {
    ...
  });

  it('should init from 0 amount', () => {
    ...
  });

  it('should increment amount', () => {
    ...
  });

  it('should fetch data', () => {
    ...
  });
});
Я начинал знакомство с тестами именно в этой структуре и именно такой комментарий должен написать любой человек, которого устраивает эта структура.

И я был точно таким же человеком, пока в какой-то момент не заметил, что многие сценарии  из старого кода снова и снова возвращаются ко мне и мне нужно дописать "еще пару тестов". Это очень мешало, потому что в каждом таком раскладе я уже полгода или даже больше как работал над другими задачами и было очень сложно вспомнить "а про что там вообще код?"

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

Поэтому сейчас мои тесты - это простой перебор всех возможных комбинаций по значениям входных параметров:

describe('Product', () => {
  it('<Product />', () => {
    ...
  });

  it('<Product fetchData/>', () => {
    ...
  });

  it('<Product product={}/>', () => {
    ...
  });

  it('<Product product={} fetchData/>', () => {
    ...
  });

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

Хотя конечно же он может вызывать желание написать именно такие комментарии :)

Комментариев нет:

Отправить комментарий