我有一些为protobuf消息自动生成的golang代码,我希望添加一些额外的测试,而不是将文件定位在相同的目录路径下。这是为了方便地删除现有的生成代码,以确保如果文件在生成时被删除,它不会意外地包含在代码库中。
这些文件的当前布局是由prototool控制的,所以我有如下内容:
/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库。other1和other2是两个帮助器库,我们将其与生成的代码一起包含,以简化客户端应用程序。服务器端在单独的存储库中,并根据需要进行导入。
因为在重新运行prototool之前能够删除/pkg/<name>很有用,所以我在path下放置了一些component_api测试(主要是为了执行自动生成的验证规则):
/internal/pkg/<name>/v1/component_api_test.go虽然这对go test -v ./...有效,但在使用-coverpkg生成覆盖率时似乎效果不佳。
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来解决
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的包,并在命令行中替换./...,但始终找不到有效的方法。也许我只是不熟悉正确的调用?
除此之外,有没有不同的布局可以帮我解决这个问题?
发布于 2020-06-16 01:55:01
要处理此场景,只需使用包和注释在与分散测试相同的目录中创建一个doc.go文件即可。这将允许标准参数工作,golang似乎对空文件相当满意。
一旦准备就绪,下面的代码将按预期工作。
go test -coverpkg=./... -coverprofile=coverage/go/coverage.out -v ./...https://stackoverflow.com/questions/60775372
复制相似问题