Нажмите здесь, чтобы сгенерировать модульные тесты
Я только что узнал о быстром способе написания тестов 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
, в нашу Superheroe
struct:
Мы дважды щелкаем каждую функцию, чтобы сгенерировать их тесты? Нет! Вы можете создавать тесты для каждой функции в исходном файле, открыв Палитру команд VSC и выбрав опцию Перейти: Создать модульные тесты для файла.
Это добавит следующий код в существующий тестовый файл:
С этого момента вы должны завершить свои тесты и, при необходимости, изменить шаблонный код в соответствии с вашими требованиями. Удачного тестирования!