首页 > 解决方案 > 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()完全没问题?

标签: gocompiler-errorsgo-testing

解决方案


这在测试包的概述中进行了解释:

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

这意味着Flam()它将不是fulfillment包的一部分,也不能从其他包中使用。如果您希望其他软件包使用测试实用程序,您需要将它们放在常规*.go文件中,而不是*_test.go.


推荐阅读