go test -coverpkg的使用,和gotest测试代码自动生成,覆盖率

目前的问题:

在正式项目中可能源代码测试代码不是在同一个目录,go test -v -cover这条命令就不好统计测试用例对源代码的覆盖率。

问题展示:

此时unittest.go(源代码),unittest_test.go(测试代码)。这是不在一个文件。
两个文件在同一个文件目录go test -v -cover就可以了。或者这样指定文件go test -v -cover unittest_test.go(测试代码) unittest.go(源代码)
go test -coverpkg的使用,和gotest测试代码自动生成,覆盖率_第1张图片
不在,则下面几个方法都可以:

  1. go test -v -cover -coverpkg=../unittest 这是cd到zidongtest目录下
  2. go test -v -cover -coverpkg=./unittest zidongtest/unittest_test.go 这是cd 到和main同级的目录。
  3. go test -v -cover -coverpkg=./unittest /绝对路径/go-testd/zidongtest/或者go test -v -cover -coverpkg=./unittest /home/qinyu/go_vscode/go-testd/zidongtest/unittest_test.go都是cd到mian同路径

分析命令:

-v 输出的更加详细
-cover 是输出测试覆盖率。这就需要源文件了。
-coverpkg 是测试代码所依赖的源文件所在包。这就是说,不是目录下的.go文件,而是直接是包就可以了。

其他收获:

  1. gotest 可以自动生成_test.go文件(这是多测试的框架
    找到gopath下,执行 go intstall github.com/cweill/gotests@latest
    这样在bin下会有个gotest。可以把它加入环境变量,这样方便用。
    gotest -all -w . 或者 gotest -all -w 具体文件.go

  2. testfiy断言。就是把注释部分代替,这样少了些if语句。

import (
	"testing"
    "zidong/unittest"
	"github.com/stretchr/testify/assert"
)
...
for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			// if got := Add(tt.args.a, tt.args.b); got != tt.want {
			// 	t.Errorf("Add() = %v, want %v", got, tt.want)
			// }
			got := unittes.Add(tt.args.a, tt.args.b)
			assert.Equal(t, tt.want, got)
		})
	}
  1. 可以写个shell脚本
    先vim zidong.sh
    然后 chmod 777 zidong.sh

你可能感兴趣的:(golang,开发语言,后端)