Go test может получить доступ к производственным функциям, но не к функциям тестирования
У меня есть проект Go 1.14 со следующей структурой каталогов:
myapp/
server/
payments/
capture_payment.go
capture_payment_test.go
billing/
billing.go
billing_test.go
fulfillment/
fulfillment.go
fulfillment_test.go
В моем billing.go
файл у меня есть:
package billing
import (
"fmt"
)
func Flim() {
fmt.Println("FLIM")
}
В моем fulfillment_test.go
файл у меня есть:
package fulfillment
import (
"fmt"
)
func Flam() {
fmt.Println("FLAM")
}
В моем capture_payment_test.go
файл у меня есть:
package payments
import (
"testing"
"github.com/myorg/myapp/billing"
"github.com/myorg/myapp/fulfillment"
)
func TestSomething(t *testing.T) {
billing.Flim()
fulfillment.Flam()
}
Когда я cd
в server/payments
и беги go test
Я получаю следующую ошибку:
$ go test
# github.com/myorg/myapp/server/payments [github.com/myorg/myapp/server/payment.test]
./capture_payment_test.go:12:2: undefined: fulfillment.Flam
FAIL github.com/myorg/myapp/server/payments [build failed]
Кто-нибудь может понять, почему fulfillment.Flam()
не определено, но billing.Flim()
совершенно нормально?
1 ответ
Это объясняется в обзоре пакета тестирования:
Чтобы написать новый набор тестов, создайте файл с именем, оканчивающимся на _test.go.... Поместите файл в тот же пакет, что и тестируемый. Файл будет исключен из обычных сборок пакетов...
Это значит, что Flam()
не будет частью fulfillment
пакет и не может использоваться из других пакетов. Если вы хотите, чтобы тестовые утилиты использовались другими пакетами, вам нужно поместить их в обычный*.go
файлы, а не *_test.go
.