我可以在go中创建共享测试实用程序吗?

时间:2015-08-03 18:21:18

标签: go

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

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

mypkg/tcpserver/tcp_server.go
mypkg/tcpserver/tcp_server_test.go
mypkg/tcpserver/testutils_test.go

testutils_test.go代码旨在成为共享库,mypkg/tcpserver和其他软件包可以使用它来为测试设置测试服务器和客户端。例如,在handler子包中我有:

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/*_test.go个文件全部导入mypkg/tcpserver,但他们无法访问mypkg/tcpserver/testutils_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中共享测试实用程序?

1 个答案:

答案 0 :(得分:9)

在非_test.go文件中创建包含测试实用程序的包。这种方法的几个例子是httptestiotest