2016-08-02 44 views
0

这里是我的目录层次结构:Golang:如何在导入的包中重用测试代码?

/ 
|-- 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中使用了一些内部方法。

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

+2

通常你不想明确地使用未导出的函数测试代码。我会认为这是一种代码味道,并探索其他方式来组织您的代码。如果你提供更多细节,有人可能会帮助你更多。 – Corbin

+0

@Corbin更新。 – lz96

+0

我还补充一点,你不_have_调用从main_test.go测试功能。如果你正确地命名,你可以放手给你打电话。 (即前面带有“测试”) https://golang.org/doc/code.html#Testing – cmp

回答

1

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

+1

带有测试工具的软件包是最好的方法。 – cmp