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

时间:2016-08-02 05:05:12

标签: unit-testing go architecture integration-testing

这是我的目录层次结构:

/
|-- 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

我只在pkg1_test.go中有一些实用函数用于测试。 main.go导入pkg1。现在我想在main_test.go中使用这些函数。搜索后我发现了两种可能的解决方案,但它们都有一些缺点:

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

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

1 个答案:

答案 0 :(得分:4)

如果您在整个项目的*_test.go文件中使用此功能,最好将其移至utils包并在*_test.go中导入此包。此外,由于此util包仅用于测试目的,我建议将pkg1的内部函数的输出保存在支持文件中,并在调用支持包的函数时加载它,该函数应该使用私有pkg1的功能。