Проблема с объявлением пакета go, содержащим более двух слов, разделенных подчеркиванием
Все , меня смущает то, что я вижу; У меня есть следующиеtree
:
├── go.mod
├── main.go
└── server
├── server.go
└── server_integration_test.go
Скажем, имя моего модуля (mod.go
) является gotest
. Содержаниеserver.go
:
package server
type MyStruct struct {
Hello string
}
func (m MyStruct) SayHello() string {
return m.Hello
}
Содержание server_integration_test.go
:
package server_integration_test
import (
"testing"
)
func TestIntegration(t *testing.T) {
t.Errorf("just gonna fail!")
}
И наконец мой main
.go`:
package main
import (
"fmt"
"gotest/server"
)
func main() {
my := server.MyStruct{Hello: "my-struct"}
fmt.Println("from mystruct", my.SayHello())
}
Когда я бегу go build
(или go test ./...
), Я получаю следующую ошибку:
main.go:5:2: found packages server (server.go) and server_integration (server_integration_test.go) in /tmp/gotest/server
Но если я изменю server_integration_test.go
быть:
package server_test
// ...
Все работает.
Может кто-нибудь объяснить, что здесь происходит?
1 ответ
Имена поддерживаемых пакетов для server
пакетные тесты server
а также server_test
.
Смотрите тестовые пакеты:
'Go test' перекомпилирует каждый пакет вместе с любыми файлами с именами, соответствующими шаблону файла "*_test.go". Эти дополнительные файлы могут содержать функции тестирования, функции тестирования и примеры функций....
Тестовые файлы, объявляющие пакет с суффиксом "_test", будут скомпилированы как отдельный пакет, а затем связаны и запущены с основным тестовым двоичным кодом.
В _test
суффикс применяется к имени тестируемого пакета (документация может быть улучшена, чтобы сделать этот факт более явным).