Ошибка в объявлении пакета go, содержащем более 2 слов, разделенных подчеркиванием - PullRequest
1 голос
/ 25 апреля 2020

всех, меня смущает то, что я вижу; У меня есть следующее 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 Ответ

2 голосов
/ 26 апреля 2020

Поддерживаемые имена пакетов для server тестов пакетов: server и server_test.

См. тестовые пакеты :

'Go test 'перекомпилирует каждый пакет вместе с любыми файлами с именами, соответствующими шаблону файла "* _test. go". Эти дополнительные файлы могут содержать функции тестирования, функции тестирования и примеры функций. ...

Тестовые файлы, которые объявляют пакет с суффиксом "_test", будут скомпилированы как отдельный пакет, а затем связаны и запущены с основным тестовым двоичным файлом.

_test Суффикс применяется к имени тестируемого пакета (документация может быть улучшена, чтобы сделать этот факт более явным).

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