Go 我可以创建共享测试实用程序吗?

Go 我可以创建共享测试实用程序吗?,go,Go,我想知道是否有可能在go中跨包共享测试实用程序代码。具体地说,我正在编写一个TCP服务器,它将由多个处理程序用于不同的消息类型,并希望重用一组常见的测试UTIL 主TCP服务器代码位于mypkg/tcpserver中: mypkg/tcpserver/tcp_server.go mypkg/tcpserver/tcp_server_test.go mypkg/tcpserver/testutils_test.go testutils\u test.go代码是一个共享库,可供mypkg/tcps

我想知道是否有可能在go中跨包共享测试实用程序代码。具体地说,我正在编写一个TCP服务器,它将由多个处理程序用于不同的消息类型,并希望重用一组常见的测试UTIL

主TCP服务器代码位于
mypkg/tcpserver
中:

mypkg/tcpserver/tcp_server.go
mypkg/tcpserver/tcp_server_test.go
mypkg/tcpserver/testutils_test.go
testutils\u test.go
代码是一个共享库,可供
mypkg/tcpserver
和其他软件包用于为其测试设置测试服务器和客户端。例如,在
处理程序
子包中,我有:

mypkg/tcpserver/handler/handler.go
mypkg/tcpserver/handler/csv_handler.go
mypkg/tcpserver/handler/csv_handler_test.go
mypkg/tcpserver/handler/delim_handler.go
mypkg/tcpserver/handler/delim_handler_test.go
handler/*\u test.go
文件全部导入
mypkg/tcpserver
,但它们无法访问在
mypkg/tcpserver/testutils\u test.go中定义的测试实用程序:

$ wgo test mypkg/tcpserver/handler
# mypkg/tcpserver/handler
src/mypkg/tcpserver/handler/csv_handler_test.go:37: undefined: tcpserver.CreateTestServer
src/mypkg/tcpserver/handler/csv_handler_test.go:40: undefined: tcpserver.TestSender
FAIL    mypkg/tcpserver/handler [build failed]

似乎测试可以导入其他包,但不能导入这些包中定义的测试代码?这就是目的吗?如果是这样,是否有一种惯用的方法在go中的包之间共享测试实用程序?

创建一个包,其中包含非test.go文件中的测试实用程序。这种方法的几个例子是和。

Darn…我希望避免在主代码库中使用测试包(即,在godoc中显示)。@mmindenhall;你可以让它成为一个,目前会,但至少更明显的是它只是内部的,也许godoc将来可以获得一个过滤内部包的功能。godoc.org从搜索结果中过滤出内部包,但在目录列表中显示它们。