目前的问题:
在正式项目中可能源代码和测试代码不是在同一个目录,go test -v -cover
这条命令就不好统计测试用例对源代码的覆盖率。
问题展示:
此时unittest.go(源代码),unittest_test.go(测试代码)。这是不在一个文件。
两个文件在同一个文件目录go test -v -cover
就可以了。或者这样指定文件go test -v -cover unittest_test.go(测试代码) unittest.go(源代码)
不在,则下面几个方法都可以:
go test -v -cover -coverpkg=../unittest
这是cd到zidongtest目录下go test -v -cover -coverpkg=./unittest zidongtest/unittest_test.go
这是cd 到和main同级的目录。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文件,而是直接是包就可以了。
其他收获:
-
gotest 可以自动生成_test.go文件(这是多测试的框架)
找到gopath下,执行go intstall github.com/cweill/gotests@latest
这样在bin下会有个gotest。可以把它加入环境变量,这样方便用。
gotest -all -w .
或者gotest -all -w 具体文件.go
-
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)
})
}
- 可以写个shell脚本
先vim zidong.sh
然后 chmod 777 zidong.sh