Нажмите здесь, чтобы сгенерировать модульные тесты

Я только что узнал о быстром способе написания тестов Go в Visual Studio Code (VSC). Программируя с коллегой, я заметил, что он сгенерировал шаблонный код теста, щелкнув правой кнопкой мыши где-нибудь в редакторе. Это привлекло мое внимание, так как я впервые увидел эту магию. Итак, немного погуглив, я узнал, как он это сделал. В этой короткой статье я опишу процесс.

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

Предположим, у вас есть исходный файл Go, подобный этому:

У него есть структура Superhero, карта nameToSuperheroName для преобразования настоящего имени супергероя в его псевдоним и функция, которая создает новый Superhero и проверяет, содержит ли карта его псевдоним. Чтобы сгенерировать шаблонный тестовый код, щелкните правой кнопкой мыши подпись функции (где написано NewSuperhero) и выберите «Перейти: создать модульные тесты для функции».

Если щелкнуть здесь, будет создан тестовый файл, содержащий тестовую функцию с именем TestNewSuperheroe и скелетный код, необходимый для начала написания тестов. Этот тестовый код следует шаблону тестирования на основе таблицы, типу тестирования, включающему структуру («таблицу»), поля которой включают входные данные тестов, ожидаемые выходные данные и другую информацию, такую ​​как ее имя.

Чтобы заполнить таблицу, вам нужно создать список анонимных структур в строке 19. Эта структура состоит из name string для присвоения имени тесту, args struct, состоящего из аргументов NewSuperheroefunction, и want, объект Superhero, который вы ожидаете от NewSuperhero. Например, на скриншоте ниже показан мой тест, который я назвал Test Tony Stark. Я использую этот тест, чтобы проверить, создают ли входные данные Tony, Stark и 48 объект Superhero, который выглядит следующим образом:

&Superhero{
    firstName:      "Tony",
    lastName:       "Stark",
    age:            48,
    superheroeName: "Iron Man",
 }

Обратите внимание, что поле superheroeName равно Iron Man, потому что имя Тони Старка переводится как «Железный человек» в соответствии с картой, определенной в исходном файле.

Но что, если мы хотим сгенерировать тесты для всех функций, которые может иметь файл? Например, предположим, что вы добавили два новых метода, isAdult и isAvenger, в нашу Superheroestruct:

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

Это добавит следующий код в существующий тестовый файл:

С этого момента вы должны завершить свои тесты и, при необходимости, изменить шаблонный код в соответствии с вашими требованиями. Удачного тестирования!