over-golang/03-工程管理/05-单元测试.md
2021-07-02 18:11:59 +08:00

82 lines
1.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 单元测试
#### 1.1 单元测试简介
单元测试用来检测某个模块某个函数的执行结果是否正确也因此能够实现监控代码质量
Go语言中自带有一个轻量级的测试框架 testing同时也自带了 `go test` 命令可以通过这些工具来实现单元测试和性能测试
#### 1.2 testing的使用
go自带的testing单元测试框架使用要求
- 测试代码必须放在以`_test.go`结尾的文件中
- 测试函数以`Test`为名称前缀
- 命令`go test`会忽略以 `_``.`开头的测试文件
- 命令`go build/install`等正常编译操作会忽略测试文件
#### 1.3 案例
文件目录
![](../images/go/09-01.png)
源码文件`/hello/hello.go`
```go
package hello
import "fmt"
func Hello() string{
return "world"
}
```
单元测试文件`/test/hello_test.go`
```go
package test
import (
"TestGo/hello"
"testing"
)
func Test_hello(t *testing.T){
r := hello.Hello()
if r != "world" {
t.FailNow()
}
}
```
运行测试文件没有main方法也可以执行
```
go test -v test/hello_test.go # -v用于显示详细测试流程
go test -v -run Test_hello test/hello_test.go # 只执行Test_hello
```
#### 1.4 测试中一些函数的区别
- Fail,Error若测试失败则测试会继续执行
- FailNow,Fatal若测试失败则测试会终止
## 代码覆盖率
代码覆盖率命令
```
go test -v -cover
```
## 断言库
使用一些第三方的断言库也可以达到原生的单元测试效果
```go
import "github.com/stretchr/testify/assert"
func Test_hello(t *testing.T){
r := hello.Hello()
assert.Equal("world")
}
```
## BDD测试框架
常用的BDD测试框架是https://github.com/smartystreets/goconvey