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

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

Если решение проблем - это то, что вам нужно, вы действительно хотите спросить, работает ли моя система так, как я хочу, или, более конкретно, несколько вопросов, например:

  • Могут ли люди войти в систему?
  • Могут ли люди выйти из системы?
  • Могут ли люди зарегистрироваться?
  • Интеграция с полосой работает?
  • Мои конечные точки API работают?
  • Могут ли люди управлять объектами x, y и z?

Основная проблема модульного тестирования заключается в том, что оно не дает ответов на эти и другие важные вопросы высокого уровня. К счастью, есть еще один метод, о котором довольно часто ругают ...

Сквозное тестирование

Есть сообщение в блоге инженера Google (который является одним из нескольких тысяч инженеров в Google) о том, почему они перешли от сквозного тестирования, вот как выглядит общий вывод о сквозном тестировании.

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

Сквозные тесты, или полностью автоматизированные тесты браузера с использованием селена или чего-то еще, действительно подходят для небольших команд и инди-разработчиков. Очень просто написать быстрый сквозной тест, и вы получите гораздо больше пользы от каждой строки таких тестов по сравнению с несколькими сотнями модульных тестов. Компромисс между «запускать их занимает много времени» (обычно порядка минут) и наносекунд, необходимых для запуска нескольких модульных тестов, - это компромисс, который я и я думаю, что многие другие инди-хакеры и небольшие команды готовы сделать.

Вывод

Все это похоже на странную одержимость всей отрасли попытками подражать крупнейшим интернет-компаниям в своем крошечном продукте. Само программное обеспечение может хорошо масштабироваться, но методы и инструменты, используемые для очень больших программ и команд, - нет. Когда вы видите еще одну запись в блоге о хакерских новостях, в которой говорится о том, как большая команда в большой компании решает проблему, не думайте, что это решит вашу проблему.