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

前言:

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://pan.baidu.com/s/1_MmqBqpwrwv8W8v6CSxJtg 
提取码:ycw8 

下载压缩包,解压到$GOPATH/src文件夹下,进入$GOPATH\src\golang.org\x\lint下运行go install即可安装golint工具

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值