飞道的博客

go开发质量工具 go test、gofmt、golint快速上手

239人阅读  评论(0)

前言:

go开发集成工具满足开发过程中单元测试、性能测试、代码格式化、代码规范检测需求。

单元测试:

测试文件以_test.go结尾,项目中默认每一个.go文件同级目录都会有一个对应的_test.go文件。

测试文件需要导入testing包,单元测试函数需要以Test为前缀,格式为:

func TestXxx(*testing.T)

以下为示例:


  
  1. // util.go文件内容
  2. package util
  3. func AddInt(a, b int) int {
  4. return a + b
  5. }
  6. func addString(a, b string) string{
  7. return a
  8. }

  
  1. //util_test.go
  2. package util
  3. import "testing"
  4. func TestAdd(t *testing.T) {
  5. num := AddInt( 1, 2)
  6. if num != 1+ 2 {
  7. t.Errorf( "1+2error, value %v", num)
  8. }
  9. }
  10. func TestString(t *testing.T) {
  11. str := addString( "123", "456")
  12. if str != "123456" {
  13. t.Errorf( "123+456 error, value %v", str)
  14. }
  15. }
  16. func TestMoreAdd(t *testing.T) {
  17. // 便于添加测试数据
  18. cases := [] struct {
  19. Name string
  20. A, B, Expected int
  21. }{
  22. { "t1", 1, 2, 3},
  23. { "t2", 2, 3, 5},
  24. { "t3", 1, 2, 31},
  25. }
  26. for _, c := range cases {
  27. t.Run(c.Name, func(t *testing.T) {
  28. if ans := AddInt(c.A, c.B); ans != c.Expected {
  29. t.Fatalf( "%v + %v expected %v, but %v got",
  30. c.A, c.B, c.Expected, ans)
  31. }
  32. })
  33. }
  34. }

在当前路径下运行 go test -v 命令可以查看每个用例的测试结果:


  
  1. PS D:\Programme\study\golang\util> go test -v
  2. === RUN TestAdd
  3. --- PASS: TestAdd (0.00s)
  4. === RUN TestString
  5. --- FAIL: TestString (0.00s)
  6. util_test.go:15: 123 +456 error, value 123
  7. === RUN TestMoreAdd
  8. === RUN TestMoreAdd/t1
  9. === RUN TestMoreAdd/t2
  10. === RUN TestMoreAdd/t3
  11. --- FAIL: TestMoreAdd (0.00s)
  12. --- PASS: TestMoreAdd/t1 (0.00s)
  13. --- PASS: TestMoreAdd/t2 (0.00s)
  14. --- FAIL: TestMoreAdd/t3 (0.00s)
  15. util_test.go:33: 1 + 2 expected 31 , but 3 got
  16. FAIL
  17. exit status 1
  18. FAIL _/D_/Programme/study/golang/util 1. 392s

如果想运行特定的测试用例可以运行 go test -v -run TestAdd


  
  1. PS D:\Programme\study\golang\util> go test -v -run TestAdd
  2. === RUN TestAdd
  3. --- PASS: TestAdd ( 0.00s)
  4. PASS
  5. ok _ /D_/Programme /study/golang/util 2.023s

如果想查看单元测试用例的代码覆盖率可以运行 go test -cover


  
  1. PS D:\Programme\study\golang\util> go test -cover
  2. --- FAIL: TestString (0.00s)
  3. util_test.go:15: 123 +456 error, value 123
  4. --- FAIL: TestMoreAdd (0.00s)
  5. --- FAIL: TestMoreAdd/t3 (0.00s)
  6. util_test.go:33: 1 + 2 expected 31 , but 3 got
  7. FAIL
  8. coverage: 100.0 % of statements
  9. exit status 1
  10. FAIL _/D_/Programme/study/golang/util 1. 646s

性能测试(基准测试):

性能测试函数以Benchmark开头,格式为:

func BenchmarkXxx(*testing.B)

测试用例如下:


  
  1. //util_test.go
  2. package util
  3. import (
  4. "testing"
  5. "fmt"
  6. )
  7. func BenchmarkSprintf(b *testing.B) {
  8. // 重置计时器
  9. b.ResetTimer()
  10. // 停止计时器
  11. b.StopTimer()
  12. // 开始计时器
  13. b.StartTimer()
  14. for i := 0; i < b.N; i++ {
  15. AddInt(i, i)
  16. }
  17. }
  18. func TestFoo(t *testing.T) {
  19. // <setup code>
  20. t.Run( "A=1", func(t *testing.T) { fmt.Println( "A=1") })
  21. t.Run( "A=2", func(t *testing.T) { fmt.Println( "A=2") })
  22. t.Run( "B=1", func(t *testing.T) { fmt.Println( "B=1") })
  23. // <tear-down code>
  24. }

运行命令 go test -bench=. -benchmem -run=none可以查看排除单元测试的性能测试和内存使用情况


  
  1. [ root@VM-0-10-centos util] # go test -bench=. -benchmem -run=none
  2. goos: linux
  3. goarch: amd64
  4. BenchmarkSprintf 1000000000 0.359 ns/op 0 B/op 0 allocs/op
  5. PASS
  6. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场