我在一个名为 的包中有两个文件db,其中一个定义了一些未导出的变量。另一个是测试文件,需要像这样使用这些变量:(这是项目的结构)$GOPATH/src/gitlab.com/myname/projectdir ├── main.go└── db ├── add.go └── add_test.go(这是文件的简洁变体)数据库/添加.gopackage dbfunc Add(x, y int) int { return x + y}// some other functions that use a and b from `add_test.go`db/add_test.gopackage dbimport ( "testing")var ( a = 1 b = 2)// test function use variables from add.gofunc testAdd(t *testing.T) { result := add(a, b) if result != 3 { t.Error(err) }}go test在db/通过的目录中运行,但是一旦我运行go run main go它就会产生以下错误:db/add.go:: 未定义:adb/add.go:: 未定义:b似乎在构建过程中add.go找不到a和b来自add_test.go。main.gopackage mainimport ( "fmt" "gitlab.com/myname/projectdir/db")func main() { res := db.Add(1, 2) fmt.Println(res)}这是因为add_test.go在构建过程中不包括在内吗?
3 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
这就是 go 工具的工作方式。
_test.go
文件仅在您运行时编译go test
。当一个包从另一个包中导入时,_test.go
不会使用其文件中的任何代码。
尝试运行go build
或go install
从 db 包中运行。它会失败。
皈依舞
TA贡献1851条经验 获得超3个赞
相对路径在 Go 中很敏感。一方面,我认为您需要在它们前面加上import "./db"
. 另一件事是你应该在你的 $GOPATH/src 位置。
试试这个:
将您的文件移动到
$GOPATH/src/project
和$GOPATH/src/project/db
目录下。./db
为数据库包添加导入路径的前缀。
至于 IDE,这完全取决于您使用的插件。尝试自己运行这些工具:golint
、go vet
、oracle
等以查看实际的 go 警告和错误。
幕布斯6054654
TA贡献1876条经验 获得超7个赞
测试功能应以 Test 开头。这就是文档所说的。
func TestAdd(t *testing.T) {
result := Add(a, b)
if result != 3 {
t.Errorf("expected 3, got %d ", result)
}
}
- 3 回答
- 0 关注
- 132 浏览
添加回答
举报
0/150
提交
取消