在 Go Programming Language 第11.2.4节中,有一个fmt.isSpace()通过IsSpacein fmt的export_test.go文件声明访问外部测试的示例。这似乎是完美的解决方案,所以我就是这样做的:
fmt.isSpace()
IsSpace
fmt
export_test.go
a/a.go:
a/a.go
package a var x int func Set(v int) { x = v }
a/a_test.go:
a/a_test.go
package a import "testing" func TestSet(t *testing.T) { Set(42) if x != 42 { t.Errorf("x == %d (expected 42)", x) } } func Get() int { return x }
(运行go test中a/工作正常。)
go test
a/
b/b.go:
b/b.go
package b import "path/to/a" func CallSet() { a.Set(105) }
b/b_test.go
package b import ( "testing" "path/to/a" ) func TestCallSet(t *testing.T) { CallSet() if r := a.Get(); r != 105 { t.Errorf("Get() == %d (expected 105)", r) } }
不幸的是,当我运行go test时b/,我得到:
b/
./b_test.go:11: undefined: a.Get
尝试同时运行两组测试go test ./...没有帮助。
go test ./...
经过一番摸索 __之后,我发现“ * _test.go文件 仅在 对该包 运行go测试时才 编译到该 包中 ”(强调我的)。(因此,换句话说,我可以a.Get从中的a_test外部测试包访问a/,但不能从外部的任何包访问a/。)
a.Get
a_test
我是否可以通过其他方法允许来自一个程序包的测试访问来自另一个程序包的内部数据,以进行集成测试?
不,没有。