go - 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()
完全没问题?
解决方案
这在测试包的概述中进行了解释:
要编写一个新的测试套件,请创建一个名称以 _test.go ... 结尾的文件。将该文件放在与被测试文件相同的包中。该文件将从常规包构建中排除...
这意味着Flam()
它将不是fulfillment
包的一部分,也不能从其他包中使用。如果您希望其他软件包使用测试实用程序,您需要将它们放在常规*.go
文件中,而不是*_test.go
.
推荐阅读
- javascript - 使用 CSS 样式的颜色代码值字典
- botium-box - 如何配置 Botium 核心以测试托管在 Web 中的 directline3 聊天机器人。有人可以在这里指导我吗?
- php - 更新记录时出错:您的 SQL 语法有误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法
- python - 莫尔斯电码在返回之前对整个莫尔斯字母进行英语循环,而不是返回每个点或破折号
- reactjs - Retorno:TypeError:无法读取未定义的属性“长度”
- jquery - 通过 jQuery 向 Flask 发送不一致的数据类型请求
- python - 如何将所有固定消息插入文件?
- javascript - 使用 Puppeteer 将数据添加到非表单字段中
- r - 当折线图和条形图来自不同的数据框时,修复 ggplot 中的图例
- php - 在 mac osx big sur 上找不到“unicode/ubrk.h”文件