【发布时间】:2022-04-10 22:27:41
【问题描述】:
我想知道是否可以跨包共享测试实用程序代码。具体来说,我正在编写一个 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