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]

似乎测试可以导入其他包,但不能导入这些包中定义的测试代码?这是本意吗?如果是这样,是否有一种惯用的方式来跨包共享测试实用程序?

最佳答案

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

关于go - 我可以创建共享测试实用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31794141/

相关文章:

xml - 仅对Golang中的匹配字段取消编码innerxml

go - 如何使用 protobuf 二进制文件在 PUB/SUB ( ZeroMQ ) 中进行过滤?

go - 如何修复 linter 警告 `Error return value is not checked`?

go - 什么可能导致 Kubernetes API 服务器无法写入客户端 CA configmap?

ajax - 使用模板在 Golang 中创建加载更多按钮

firebase - Firebase 身份验证客户端线程安全吗?

logging - GO lang日志包的局限性

go - 在 Golang 中创建多维嵌套映射 slice

c++ - 将 C++ 片段转换为 Golang

go - goroutine 中的代码块产生奇怪的错误结果