Я работаю над проектом, в котором я создал прикрепленную структуру.
под tests->gchat_test
у меня два файла init.go
и gchat_test.go
//init.go
package gchat_test
//initiation code
//gchat_test.go
package gchat_test
//testing code
для этих файлов у меня возникает следующая ошибка в VSCode
found packages gchat (gchat_test.go) and gchat_test (init.go) in /home/<<>>/errornotifier/tests/gchat_test
Я также пробовал с консоли, чтобы убедиться, что это не проблема VSCode.
~/Loans/errornotifier/tests/gchat (feture/initial)$ go test
found packages gchat (gchat_test.go) and gchat_test (init.go) in /home/<<>>/errornotifier/tests/gchat_test
У меня есть аналогичная структура для другого набора тестов, и я не сталкивался с этой ошибкой.
под tests->kafka_test
у меня два файла init.go
и kafka_test.go
//init.go
package kafka_test
//initiation code
//kafka_test.go
package kafka_test
//testing code
В качестве быстрого исправления я переместил инициацию с tests->gchat_test->init.go
на tests->gchat_test->gchat_test.go
и удалил init.go
, после чего все заработало.
Я хочу понять, почему выдается эта ошибка, хотя у меня такое же имя пакета для этих файлов и как это исправить
@mkopriva Где я могу прочитать об этом подробнее, и у меня есть два тестовых пакета kafka_test
и gchat_test
, в первом нет этой ошибки.
Перейдите здесь и найдите «_test» в тексте, вы найдете несколько экземпляров.
@Sab Я предполагаю, что go загружает файлы в алфавитном порядке, поэтому он работает при загрузке init.go -> kafka_test.go
, но не наоборот, gchat_test.go -> init.go
Файлы без суффикса _test.go
будут формировать исходные файлы пакета. Файлы с суффиксом _test.go
исключаются с помощью go build
. Тестовые файлы, объявляющие пакет с суффиксом _test
, образуют другой пакет.
Таким образом, у вас есть пакет нормальныйgchat_test
, определенный нетестовым файлом init.go
, и у вас есть пакет контрольная работаgchat_test
, определенный тестовыми файлами gchat_test.go
. Будет ли это работать, зависит от реализации инструмента Go.
В общем, имена пакетов, содержащие _test
, не должны использоваться в нетестовых пакетах.init.go
не является тестовым файлом, он не должен объявлять тестовый пакет.
Compile packages and dependencies:
When compiling packages, build ignores files that end in '_test.go'.
'Go test' recompiles each package along with any files with names matching the file pattern "*_test.go". These additional files can contain test functions, benchmark functions, fuzz tests and example functions. See 'go help testfunc' for more. Each listed package causes the execution of a separate test binary. Files whose names begin with "_" (including "_test.go") or "." are ignored.
Test files that declare a package with the suffix "_test" will be compiled as a separate package, and then linked and run with the main test binary.
Если вы хотите избежать этой проблемы, я бы посоветовал вам перестать называть свои пакеты в нетестовых файлах
xyz_test
. Как и файлы, оканчивающиеся на_test.go
, пакеты, оканчивающиеся на_test
, имеют особое значение для инструмента go.