go test测试文件应该放置与何处?

weixin_38058131 2019-09-20 10:35:39
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文件使用任意的包名即可,但是要保证是完全一致的,因为一个目录下只能有一个包名。
...全文
233 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38058190 2019-09-20
  • 打赏
  • 举报
回复
补充一条。 go test文件中,还可以增加benchmark用例。 差别在于:benchmark用例必须以Benchmark开头,且在运行时一定要加-bench参数,例如: go test -bench=. go test只会运行Test开头的用例。 TestMain(m *testing.M) 是一个总管初始化入口,可以将数据库,网络等一些初始化操作放置到这里。 Benchmark测试用例需要保证其执行能在一个稳态上,否则可能b.N为了适应变化,不断调整N值,导致无法运行完成。

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧