Избавьтесь от страха и неуверенности в отношении модульных тестов, разбив их на составляющие.

В GOJEK мы искренне стараемся протестировать наш код. Мы даже получили отзывы от новичков о том, что освещение, свидетелями которого они стали на GOJEK, не имеет себе равных. (Квота Humblebrag исчерпана, обещаю 😅).

Делая обзоры кода для кандидатов, поступающих в GOJEK, я был удивлен, узнав, что большинство из них не умеют писать тесты. Скорее всего, это можно объяснить двумя причинами:

Причина 1. Отсутствие мотивации

Иногда люди не верят в рентабельность юнит-тестов. По моему опыту, тесты помогли нам:

а) уверенный рефакторинг

б) создать модульный и расширяемый дизайн

c) быстро добавлять новые функции. Множество блогов и лидеры отрасли могут засвидетельствовать, что тщательно протестированное программное обеспечение переживает другие в любое время суток.

Причина 2: страх

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

Тесты имеют первостепенное значение для любого программного обеспечения, которое хочет выжить!

В этом посте мы разберем, что такое модульные тесты и как их писать.

Итак, что такое модульный тест? 🤔

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

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

Например, давайте протестируем функцию, которая складывает два числа:

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

Возможности модульного тестирования с зависимостями

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

Мы тестируем функцию добавления для нескольких сценариев, заглушив ответ от сервера аутентификации. Поскольку все программное обеспечение имеет внешние зависимости, заглушки (официально известные как тестовые двойники) являются основными блоками модульного тестирования. Чтобы лучше понять тестовые двойники, я рекомендую прочитать блоги на тему Дядя Боб и Мартин Фаулер.

Настройка, разборка, тестовые наборы и многое другое…

Некоторые функции требуют обширной настройки, прежде чем их можно будет протестировать. Это может включать создание клиента базы данных, заполнение базы данных и т. Д. Наборы тестов помогают нам настроить предварительное тестирование среды.

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

В итоге

Максимальное количество модульных тестов состоит из пяти шагов: setup , test doubles , exercise , expectations и teardown (он же AAA). Для тестирования любой функции определите ожидания и работайте в обратном направлении, выполнив настройку, имея необходимые тестируйте двойники, упражнения и, наконец, выполните разборку.

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

Несколько мыслей на прощание

Я надеюсь, что этот блог убедил вас в важности модульного тестирования; и дал общее представление о том, как их писать. Тестирование простое, а рентабельность инвестиций огромна. Начните модульное тестирование, если вы еще этого не сделали, и расскажите мне о своем опыте в комментариях ниже.

Помните, если вы застряли, не бойтесь спрашивать! 😀

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