Go:测试内部功能

假设我在包中有一个MyType带有私有方法的类型。我还有一个目录,我想在其中存储我的包的测试。这是这样的:(mt *MyType) private()mypackageteststests/mypackage_test.go


package mypackage_test


import (

    "testing"

    "myproj/mypackage"

)


func TestPrivate(t *testing.T) {

    // Some test code

}

但是,当我运行时go test,cannot refer to unexported field or method my package.(*MyType)."".private)出现错误。我用谷歌搜索了一下,发现以小写开头的函数不能在它们自己的包之外看到(这似乎是真的,因为大写函数可以从测试中自由调用)。


我还在某处读到添加<...>_internal_test.go到测试文件可以解决我这样的问题(tests/mypackage_internal_test.go):


package mypackage


import (

    "testing"

)


func TestPrivate(t *testing.T) {


    mt := &MyType{}

    // Some test code

}  

但是有了这个,我只能得到undefined: MyType. 所以,我的问题是:如何测试内部/私有方法?


炎炎设计
浏览 176回答 2
2回答

小怪兽爱吃肉

为什么将测试放在不同的包中?go testing 机制_test用作测试文件的后缀,因此您可以将测试放在与实际代码相同的包中,避免您描述的问题。将测试放在单独的包中并不是 Go 的惯用做法。不要试图与围棋约定作斗争,这是不值得的,而且你很可能会输掉这场斗争。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go