如何重用导入包中的测试代码?

lz9*_*z96 6 architecture integration-testing unit-testing go

这是我的目录层次结构:

/
|-- main.go // package main, an HTTP server which accepts request and calls C/U APIs in pkg1 to finish certain task
|-- main_test.go // wants to call veryfyTaskNumber in pkg1_test
|-- pkg1 // package pkg1, CRUD APIs with Retrieve&Delete unexported for safety
    |-- pkg1_test.go // contains a function verifyTaskNumber(*testing.T, taskName string, expectedNo int) which calls internal Retrieve function in pkg1
Run Code Online (Sandbox Code Playgroud)

我仅在中有一些用于测试的实用程序功能pkg1_test.gomain.go进口pkg1。现在,我想在我的中使用这些功能main_test.go。搜索之后,我找到了两种可能的解决方案,但是它们都有一些缺点:

  • 将这些功能移到中pkg1.go。但是,这些函数可能包含在生成的二进制文件中go build
  • 将这些功能移到单独的testutility程序包中,然后*_test.go手动将其导入。问题是这些函数在中使用了一些内部方法pkg1

所以我想知道是否有更好的解决方案来解决这个问题。

Bes*_*bug 6

如果您在*_test.go整个项目的文件中使用此函数,最好将其移动到一个 utils 包并在您的*_test.go. 此外,由于此 util 包仅用于测试目的,因此我建议将 的内部函数的输出保存pkg1在支持文件中,并在调用应使用pkg1.

  • 由于循环导入问题,具有测试实用程序的包将帮助其他所有人*除了*那些相关测试源实际存在的包。即“pkg1”有一堆你想测试的结构,一个“util”包有一些依赖于这个包的测试实用程序。由于循环导入,这个“util”可以在其他任何地方使用*除了*“pkg1”。 (4认同)