Как мне упаковать вспомогательный код golang test? - PullRequest
1 голос
/ 01 июня 2019

У меня есть некоторый вспомогательный тестовый код в моей библиотеке golang, который я хочу использовать при тестировании в различных подпакетах. Однако я наткнулся на загвоздку:

outer
|
+- test_helpers_test.go
|
+- inner
   |
   +- something.go
   +- something_test.go

Чтобы использовать код в test_helpers_test.go, я должен импортировать внешний пакет. Но когда я импортирую внешний пакет из something_test.go, он выдает «цикл импорта не разрешен в тесте»

Итак, я попытался создать пакет для общих помощников по тестированию:

outer
|
+- test
|  |
|  +- test_helpers_test.go
|
+- inner
   |
   +- something.go
   +- something_test.go

И теперь он жалуется на то, что "нет файлов Go без проверки в / home / karl / Projects / outer / test"

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

Как мне решить эту проблему?


Обновление: я могу обойти эту проблему, создав файл dummy.go в каталоге test, но теперь появилась новая проблема: импорт пакета НЕ импортирует его тестовый код! Итак, теперь я получаю: ./something_test.go:12:2: undefined: test.AssertDoesPanic

Ответы [ 2 ]

2 голосов
/ 01 июня 2019

После иди 8279 , я видел добавленные фиктивные файлы, как в tommie/acme-cli commit 479f8c7

outer/outer.go

// +build ignore+
package outer

Посмотрите, может ли это помочь, как обходной путь.


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

1 голос
/ 02 июня 2019

Вы правы, что не можете импортировать тестовый код из другого пакета, поэтому ваши вспомогательные функции должны идти в надлежащие файлы кода, а не в тестовые файлы.

Если он не импортирован из вашего не тестового кода, он не будет встроен в окончательный двоичный файл.

Авторы, как правило, называют пакет ...test, чтобы указать, что это просто помощники по тестированию, например httptest из стандартной библиотеки или zaptest из открытого исходного кода.

https://golang.org/pkg/net/http/httptest/ https://godoc.org/go.uber.org/zap/zaptest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...