go test文件应该放在哪里?
#### go test的命名约束
请大家参见如下的博客:https://blog.csdn.net/code_segment/article/details/77507491
- 文件名必须是`_test.go`结尾的(文件名必须是`*_test.go`的类型,*代表要测试的文件名),这样在执行`go test`的时候才会执行到相应的代码
- 你必须import`testing`这个包
- 所有的测试用例函数必须是`Test`开头(函数名必须以Test开头如:TestXxx或Test_xxx)
- 测试用例会按照源代码中写的顺序依次执行
- 测试函数`TestXxx()`的参数是`testing.T`,我们可以使用该类型来记录错误或者是测试状态
- 测试格式:`func TestXxx (t *testing.T)`,`Xxx`部分可以为任意的字母数字的组合,但是首字母不能是小写字母[a-z],例如`Testintdiv`是错误的函数名。
- 函数中通过调用`testing.T`的`Error`,`Errorf`,`FailNow`,`Fatal`,`FatalIf`方法,说明测试不通过,调用`Log`方法用来记录测试的信息。
#### go test文件放置何处
对比如下的2种情况:
##### 1.go test文件与源文件放置在相同的目录
在相同的目录下,不能声明多个package,否则会报如下的错误:
```
D:\workspace\go\src\tryme\add>go test
can't load package: package tryme/add: found packages add (add.go) and me (add_test.go) in D:\workspace\go\src\tryme\add
```
在相同的目录下,也就是在相同的package下,接口是可见的,不需要在test文件中引入待测试接口的package,否则会提示出现import cycle:
```
D:\workspace\go\src\tryme\add>go test
# tryme/add
import cycle not allowed in test
```
因此,主要直接使用接口就可以。
##### 2.go test文件与源文件没有放置到不同的目录下
可将单元测试文件与源文件进行分离,方便集中进行管理。
此时需要注意的事项包括:
- 需要import导入源文件所在的包,使用接口时,也需要使用“package_name.API”的方式引用。
- go_test文件使用任意的包名即可,但是要保证是完全一致的,因为一个目录下只能有一个包名。
补充一条。
go test文件中,还可以增加benchmark用例。
差别在于:benchmark用例必须以Benchmark开头,且在运行时一定要加-bench参数,例如:
go test -bench=.
go test只会运行Test开头的用例。
TestMain(m *testing.M) 是一个总管初始化入口,可以将数据库,网络等一些初始化操作放置到这里。
Benchmark测试用例需要保证其执行能在一个稳态上,否则可能b.N为了适应变化,不断调整N值,导致无法运行完成。
#1