一尘不染

仅在测试时,如何允许一个包访问另一个包的未导出数据?

go

Go Programming Language 第11.2.4节中,有一个fmt.isSpace()通过IsSpacein
fmtexport_test.go文件声明访问外部测试的示例。这似乎是完美的解决方案,所以我就是这样做的:

a/a.go

package a

var x int

func Set(v int) {
    x = v
}

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 testa/工作正常。)

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 testb/,我得到:

./b_test.go:11: undefined: a.Get

尝试同时运行两组测试go test ./...没有帮助。

经过一番摸索 __之后,我发现“ * _test.go文件
仅在

对该包

运行go测试时才

编译到该

包中

”(强调我的)。(因此,换句话说,我可以a.Get从中的a_test外部测试包访问a/,但不能从外部的任何包访问a/。)

我是否可以通过其他方法允许来自一个程序包的测试访问来自另一个程序包的内部数据,以进行集成测试?


阅读 222

收藏
2020-07-02

共1个答案

一尘不染

我是否可以通过其他方法允许来自一个程序包的测试访问来自另一个程序包的内部数据,以进行集成测试?

不,没有。

2020-07-02