首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不放置测试的情况下测试生成的Go代码

在不放置测试的情况下测试生成的Go代码
EN

Stack Overflow用户
提问于 2020-03-20 21:42:01
回答 1查看 496关注 0票数 1

我有一些为protobuf消息自动生成的golang代码,我希望添加一些额外的测试,而不是将文件定位在相同的目录路径下。这是为了方便地删除现有的生成代码,以确保如果文件在生成时被删除,它不会意外地包含在代码库中。

这些文件的当前布局是由prototool控制的,所以我有如下内容:

代码语言:javascript
复制
/pkg/<other1>
/pkg/<other2>
/pkg/<name-generated>/v1/component_api.pb.go
/pkg/<name-generated>/v1/component_api.pb.gw.go
/pkg/<name-generated>/v1/component_api.pb.validate.go

验证来自envoyproxy/protoc-gen- *.validate.go,而*.pb.go & *.pb.gw.go来自protobuf和grpc库。other1other2是两个帮助器库,我们将其与生成的代码一起包含,以简化客户端应用程序。服务器端在单独的存储库中,并根据需要进行导入。

因为在重新运行prototool之前能够删除/pkg/<name>很有用,所以我在path下放置了一些component_api测试(主要是为了执行自动生成的验证规则):

代码语言:javascript
复制
/internal/pkg/<name>/v1/component_api_test.go

虽然这对go test -v ./...有效,但在使用-coverpkg生成覆盖率时似乎效果不佳。

代码语言:javascript
复制
go test -coverpkg=./... -coverprofile=coverage/go/coverage.out -v ./...

go build <pkgname>/internal/pkg/<name>/v1: no non-test Go files in ....
<output from the tests in /internal/pkg/<name>/v1/component_api_test.go>
....
....
coverage: 10.5% of statements in ./...
ok      <pkgname>/internal/pkg/<name>/v1    0.014s  coverage: 10.5% of statements in ./...
FAIL    <pkgname>/pkg/other1 [build failed]
FAIL    <pkgname>/pkg/other2 [build failed]
?       <pkgname>/pkg/<name>/v1 [no test files]
FAIL
Coverage tests failed
Generated coverage/go/html/main.html

使用-coverpkg的原因是,如果没有它,似乎不会发现<pkgname>/pkg/<name>/v1下的任何代码都被覆盖了,而且我们已经看到了它以前报告的没有显示真实覆盖级别的问题,这些问题可以通过使用-coverpkg来解决

代码语言:javascript
复制
go test -cover -coverprofile=coverage/go/coverage.out ./...
ok      <pkgname>internal/pkg/<name>/v1 0.007s  coverage: [no statements]
ok      <pkgname>/pkg/other1 0.005s coverage: 100.0% of statements
ok      <pkgname>/pkg/other2    0.177s  coverage: 100.0% of statements
?       <pkgname>/pkg/<name>/v1 [no test files]

查看生成的coverage/go/coverage.out时,没有提到<pkgname>/pkg/<name>/v1下的任何内容正在执行。

除了局限于prototool自动管理的<pkgname>/pkg/<name>/v1和生成文件的命名规则之外,我没有附加到当前的布局中。我希望确保我们拥有的其他模块可以保持导出以用作助手库,并且我希望能够为<pkgname>/pkg/<name>/v1添加测试,而不需要在同一目录中找到它们,以便轻松删除和重新创建生成的文件,同时仍然获得合理的覆盖率报告。

我尝试修改传递给-coverpkg的包,并在命令行中替换./...,但始终找不到有效的方法。也许我只是不熟悉正确的调用?

除此之外,有没有不同的布局可以帮我解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-06-16 01:55:01

要处理此场景,只需使用包和注释在与分散测试相同的目录中创建一个doc.go文件即可。这将允许标准参数工作,golang似乎对空文件相当满意。

一旦准备就绪,下面的代码将按预期工作。

代码语言:javascript
复制
go test -coverpkg=./... -coverprofile=coverage/go/coverage.out -v ./...

https://stackoverflow.com/a/47025370/1597808中基于建议的思想

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60775372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档