进行测试可以访问生产功能,但不能访问测试功能

时间:2020-06-26 08:10:32

标签: go compiler-errors go-testing

我有一个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 个答案:

答案 0 :(得分:4)

testing package的概述中对此进行了解释:

要编写新的测试套件,请创建一个名称以_test.go ...结尾的文件。 将文件与要测试的文件放在同一软件包中。文件 将从常规软件包构建中排除...

这意味着Flam()将不属于fulfillment软件包,并且不能在其他软件包中使用。如果要让其他软件包使用测试实用程序,则需要将它们放在常规*.go文件中,而不要放在*_test.go文件中。