小编典典

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

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]

看来测试可以导入其他程序包,但是不能导入那些程序包中定义的测试代码?这是目的吗?如果是这样,是否有一种惯用的方式可以在所有软件包之间共享测试实用程序?


阅读 215

收藏
2020-07-02

共1个答案

小编典典

创建一个包含非_test.go文件中的测试实用程序的程序包。httptestiotest是此方法的两个示例

2020-07-02