我的软件包中有一个生成的文件,顶部写着DO NOT EDIT
。我正在使用go test -coverprofile=cover.out <package>
运行软件包的测试。这将创建覆盖率文件并显示总体覆盖率百分比。但是,在计算覆盖范围时,它也包括生成的文件。是否有一种方法可以忽略生成的文件在覆盖范围计算中的影响?
我的软件包中有一个生成的文件,顶部写着DO NOT EDIT
。我正在使用go test -coverprofile=cover.out <package>
运行软件包的测试。这将创建覆盖率文件并显示总体覆盖率百分比。但是,在计算覆盖范围时,它也包括生成的文件。是否有一种方法可以忽略生成的文件在覆盖范围计算中的影响?
您可以从覆盖概要中剥离生成的代码:
go test . -coverprofile cover.out.tmp
cat cover.out.tmp | grep -v "_generated.go" > cover.out
tool cover -func cover.out
根据使用的工具,这可以轻松地在流水线/制作中实现。
以下是我能解决这个问题的方法。
由于要运行测试并生成封面,您将指定go test命令应查找文件的pkgs,超出此pkg范围的文件将自动被忽略。以下是一个例子:
project
|_______/pkg/web/app
|_______/pkg/web/mock -> It will be ignored.
# Command:
$go test -failfast -tags=integration -coverprofile=coverage.out -covermode=count github.com/aerogear/mobile-security-service/pkg/web/apps
但并非所有情况都适用。例如,在文件被模拟接口程序占用的情况下,可能会不起作用,因为所需的服务、测试和模拟导入很可能会处于循环中,这是不允许的。
如果您想要忽略在测试中使用的文件,则在名称结尾处使用_test
是有意义的。例如:my_service_mock_test.go
。名称以_test
结尾的文件将默认被忽略。
go test . -coverprofile cover.out.tmp
cat cover.out.tmp | grep -v "_generated.go" > cover.out
tool cover -func cover.out
附注:我找不到任何评论或标记来排除它们。
grep -v "_generated.go" cover.out.tmp
代替cat cover.out.tmp | grep -v "_generated.go"
。 - undefined你可以从测试中用grep筛选出那些目录。
所以,不是:
go test ./...
你需要这样做: 你需要这样做:
go test `go list ./... | grep -v ./excluded/autogen/directory/here`
同时,确保您不要添加尾随的/
。这会导致不完美的工作。
go tool cover
重新分析覆盖率。 - user142162