前言:
go开发集成工具满足开发过程中单元测试、性能测试、代码格式化、代码规范检测需求。
单元测试:
测试文件以_test.go结尾,项目中默认每一个.go文件同级目录都会有一个对应的_test.go文件。
测试文件需要导入testing包,单元测试函数需要以Test
为前缀,格式为:
func TestXxx(*testing.T)
以下为示例:
-
// util.go文件内容
-
package util
-
-
func AddInt(a, b int) int {
-
return a + b
-
}
-
-
func addString(a, b string) string{
-
return a
-
}
-
//util_test.go
-
package util
-
-
import
"testing"
-
-
func TestAdd(t *testing.T) {
-
num := AddInt(
1,
2)
-
if num !=
1+
2 {
-
t.Errorf(
"1+2error, value %v", num)
-
}
-
}
-
-
func TestString(t *testing.T) {
-
str := addString(
"123",
"456")
-
if str !=
"123456" {
-
t.Errorf(
"123+456 error, value %v", str)
-
}
-
}
-
-
func TestMoreAdd(t *testing.T) {
-
// 便于添加测试数据
-
cases := []
struct {
-
Name
string
-
A, B, Expected
int
-
}{
-
{
"t1",
1,
2,
3},
-
{
"t2",
2,
3,
5},
-
{
"t3",
1,
2,
31},
-
}
-
-
for _, c :=
range cases {
-
t.Run(c.Name,
func(t *testing.T) {
-
if ans := AddInt(c.A, c.B); ans != c.Expected {
-
t.Fatalf(
"%v + %v expected %v, but %v got",
-
c.A, c.B, c.Expected, ans)
-
}
-
})
-
}
-
}
在当前路径下运行 go test -v 命令可以查看每个用例的测试结果:
-
PS
D:\Programme\study\golang\util>
go
test
-v
-
===
RUN
TestAdd
-
---
PASS:
TestAdd
(0.00s)
-
===
RUN
TestString
-
---
FAIL:
TestString
(0.00s)
-
util_test.go:15:
123
+456
error,
value
123
-
===
RUN
TestMoreAdd
-
===
RUN
TestMoreAdd/t1
-
===
RUN
TestMoreAdd/t2
-
===
RUN
TestMoreAdd/t3
-
---
FAIL:
TestMoreAdd
(0.00s)
-
---
PASS:
TestMoreAdd/t1
(0.00s)
-
---
PASS:
TestMoreAdd/t2
(0.00s)
-
---
FAIL:
TestMoreAdd/t3
(0.00s)
-
util_test.go:33:
1
+
2
expected
31
,
but
3
got
-
FAIL
-
exit
status
1
-
FAIL
_/D_/Programme/study/golang/util
1.
392s
如果想运行特定的测试用例可以运行 go test -v -run TestAdd
-
PS
D:\Programme\study\golang\util> go test -v -run TestAdd
-
=== RUN TestAdd
-
---
PASS: TestAdd (
0.00s)
-
PASS
-
ok _
/D_/Programme
/study/golang/util
2.023s
如果想查看单元测试用例的代码覆盖率可以运行 go test -cover
-
PS
D:\Programme\study\golang\util>
go
test
-cover
-
---
FAIL:
TestString
(0.00s)
-
util_test.go:15:
123
+456
error,
value
123
-
---
FAIL:
TestMoreAdd
(0.00s)
-
---
FAIL:
TestMoreAdd/t3
(0.00s)
-
util_test.go:33:
1
+
2
expected
31
,
but
3
got
-
FAIL
-
coverage:
100.0
%
of
statements
-
exit
status
1
-
FAIL
_/D_/Programme/study/golang/util
1.
646s
性能测试(基准测试):
性能测试函数以Benchmark开头,格式为:
func BenchmarkXxx(*testing.B)
测试用例如下:
-
//util_test.go
-
package util
-
-
import (
-
"testing"
-
"fmt"
-
)
-
func BenchmarkSprintf(b *testing.B) {
-
-
// 重置计时器
-
b.ResetTimer()
-
-
// 停止计时器
-
b.StopTimer()
-
-
// 开始计时器
-
b.StartTimer()
-
-
for i :=
0; i < b.N; i++ {
-
AddInt(i, i)
-
}
-
}
-
-
func TestFoo(t *testing.T) {
-
// <setup code>
-
t.Run(
"A=1",
func(t *testing.T) { fmt.Println(
"A=1") })
-
t.Run(
"A=2",
func(t *testing.T) { fmt.Println(
"A=2") })
-
t.Run(
"B=1",
func(t *testing.T) { fmt.Println(
"B=1") })
-
// <tear-down code>
-
}
运行命令 go test -bench=. -benchmem -run=none可以查看排除单元测试的性能测试和内存使用情况
-
[
root@VM-0-10-centos
util]
# go test -bench=. -benchmem -run=none
-
goos:
linux
-
goarch:
amd64
-
BenchmarkSprintf
1000000000
0.359
ns/op
0
B/op
0
allocs/op
-
PASS
-
ok
_/root/study/golang/util
0.
403s
代码格式化:
可以在当前包路径运行go fmt 命令自动对索引.go文件进行代码的格式化。
go fmt默认对当前路径下的所有go文件进行代码格式化,你也可以指定一个文件或者目录进行代码格式化 。
go fmt -s会开启代码简化功能:
1:简化不必要的类型声明
2:去除数组切片操作时不必要的索引指定
3:去除循环时非必要的变量赋值
代码规范检测:
Golint作为代码规范检测,会对代码做以下几个方面检查
package注释 必须按照 “Package xxx 开头”
package命名 不能有大写字母、下划线等特殊字符
struct、interface等注释 必须按照指定格式开头
struct、interface等命名
变量注释、命名
函数注释、命名
各种语法规范校验等
转载:https://blog.csdn.net/wjb123sw99/article/details/116723270
查看评论