如何在自定义文件夹中使用go test生成多个包的覆盖率?

7
我们有以下的项目结构:
├── Makefile
├── ...
├── src
│   ├── app
│   │   ├── main.go
│   │   ├── models
│   │       ├── ...
│   │       └── dao.go
│   │   ├── ...
│   │   └── controllers
│   │       ├── ...
│   │       └── pingController.go
│   └── test
│       ├── all_test.go
│       ├── ...
│       └── controllers_test.go
└── vendor
    └── src
        ├── github.com
        ├── golang.org
        └── gopkg.in

我希望通过src/test中的测试测量src/app包中的软件包覆盖率。目前,我是通过运行自定义脚本来为app中的每个软件包运行覆盖分析,并将所有覆盖分析文件合并成一个文件来生成覆盖分析文件。最近我听说在go1.10中,我们可以生成多个包的覆盖分析。

因此,我尝试用一行命令替换那个脚本,并尝试运行:

GOPATH=${PROJECT_DIR}:${PROJECT_DIR}/vendor go test -covermode count -coverprofile cover.out -coverpkg all ./src/test/...

当我执行以下命令:

"ok test 0.475s, 覆盖率为0.0%,涵盖了所有语句"

以上内容涉及IT技术领域,希望我的翻译可以对您有所帮助。

cd src/test/
GOPATH=${PROJECT_DIR}:${PROJECT_DIR}/vendor go test -covermode count -coverprofile cover.out -coverpkg all

日志显示规范已经运行并且测试成功,但是我仍然有“覆盖率:所有语句的0.0%”和空的cover.out文件。

我错过了什么以正确计算应用程序包在测试中的覆盖率?


1
可以查看这个链接,它可能会有所帮助。基本上,在Go语言中,将testssrc放在不同的包中并不被认为是一种好的做法。 - Shettyh
@Shettyh 所以,简短的回答是“这个项目结构目前还不可能实现”? - Bunyk
1
据我所知,目前还不可能。 - Shettyh
看起来在最近的Go版本中,“-coverpkg”选项已经被修复,并且可以正确记录列出的包的覆盖率。 - Peter Zeller
2个回答

1

可以做到,看看我的回复 https://dev59.com/iqrka4cB1Zd3GeqPYhug#58508728 - alessiosavi

1
简短回答:

go test -race -coverprofile=coverage.txt -covermode=atomic ./...  # Run all the tests with the race detector enabled
go test -bench=. -benchmem ./... # Run all the benchmark for 3s and print memory information

为了创建一个 Go 代码的测试,您需要创建一个文件(与根代码相同的文件夹中),该文件具有与代码相同的名称,并在名称后附加“_test”。包也必须相同。
因此,如果我有一个名为“strings.go”的 GO 代码,则相关的测试套件必须命名为:“strings_test.go”。
之后,您需要创建一个方法,其中输入是“t *testing.T”结构体,方法的名称必须以“Test”或“Benchmark”单词开头。
因此,如果“strings.go”包含名为“IsUpper”的方法,则相关的测试用例是名为“TestIsUpper(t *testing.T)”的方法。 如果您需要基准,则需要将“Test”单词替换为“Benchmark”,因此方法的名称将为“BenchmarkIsUpper”,并且方法接受的结构体是“b *testing.B”。

您可以查看以下链接,以了解在GO中执行测试所需的树形结构:https://github.com/alessiosavi/GoGPUtils

在那里,您可以找到Benchmark和TestCase。

这里是一个树形结构的示例

├── string
│   ├── stringutils.go
│   └── stringutils_test.go

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接