Как проверить основной пакет в Golang из «тестового» пакета? - PullRequest
0 голосов
/ 01 января 2019

У меня есть простая программа, написанная на Голанге.Это API.Итак, внутри папки проекта есть папка с именем cmd, содержащая мой пакет main (используется для инициализации приложения и определения конечных точек для API).Также есть папка с именем моей программы, содержащая несколько файлов из пакета, также названного в честь моей программы.Этот пакет служит моделью для выполнения всех необходимых запросов и содержит все типы, которые я определил.

Я также создал папку с именем test.Он содержит все мои тестовые файлы в пакете с именем test.Проблема в том, что для запуска тестов мне нужен доступ к моему основному пакету!Есть ли способ сделать это на Голанге?Я попытался просто использовать import "cmd/main", но, конечно, это не работает.

У меня тоже была идея.Возможно, я мог бы переместить все свои инициализирующие функции (в папке cmd) в пакет, названный в честь моей программы.Таким образом, я мог бы сделать обычный import в test.И я создаю внутри cmd main.go в пакете main, который служит точкой входа для компилятора.

Я новичок в Go, поэтому я не совсем уверен в этом.Как вы думаете, это правильный путь?

Спасибо.

РЕДАКТИРОВАТЬ: Очевидно, некоторые люди думают, что этот вопрос является дубликатом, но это не так.Вот объяснение, которое я дал в комментариях:

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

1 Ответ

0 голосов
/ 02 января 2019

То, что вы хотите сделать, невозможно в GO (при условии, что вы хотите тестировать частные функции).

, потому что я не хочу, чтобы мои тесты были в основном пакете.Я бы предпочел, чтобы все они были в тестовой папке внутри одного пакета.

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

Вот как GO определяетпакеты https://golang.org/doc/code.html#Organization:

Каждый пакет состоит из одного или нескольких исходных файлов Go в каталоге single .

Так структурирован ваш код:

main
| -- main.go (package main)
+ -- test
     | -- main_test.go (package test)

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

Вот как вы можете организовать свой код:

main
| -- main.go (package main)
| -- main_test.go (package main_test)
| -- main_private_test.go (package main)

Часто имеет смысл тестировать код на его общедоступных интерфейсах.Лучший способ сделать это - поместить тесты в другой пакет.Соглашение GO - держать тесты в одной папке, что приводит к использованию одного и того же имени пакета.Существует решение этой проблемы.Вы можете добавить префикс _test (package main_test) к имени пакета для ваших тестов.

Если проверить код с помощью общедоступных интерфейсов невозможно, вы можете добавить другой файл с тестами и использовать package main в этом файле.

...