Unit testing 测试生成的Go代码而无需共同定位测试

Unit testing 测试生成的Go代码而无需共同定位测试,unit-testing,go,code-coverage,Unit Testing,Go,Code Coverage,有一些自动生成的golang代码用于protobuf消息,我希望添加一些额外的测试,而无需将文件定位在同一目录路径下。这允许轻松删除现有生成的代码,以确保如果从生成中删除文件,不会意外地将其包含在代码库中 这些文件的当前布局由prototool控制,因此我有如下内容: /pkg/<other1> /pkg/<other2> /pkg/<name-generated>/v1/component_api.pb.go /pkg/<name-generated&

有一些自动生成的golang代码用于protobuf消息,我希望添加一些额外的测试,而无需将文件定位在同一目录路径下。这允许轻松删除现有生成的代码,以确保如果从生成中删除文件,不会意外地将其包含在代码库中

这些文件的当前布局由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
虽然这适用于
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
查看结果coverage/go/coverage.out没有提到正在执行的
/pkg//v1
下的任何内容

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

我尝试过摆弄传递给
-coverpkg
的包,并在命令行上替换
/…
,但没有找到有效的方法。也许我只是不熟悉正确的调用


除此之外,还有一种不同的布局可以为我解决这个问题吗?

要处理这种情况,只需在与已定位测试相同的目录中创建一个doc.go文件,其中只包含包和注释。这将允许标准参数工作,golang似乎对一个空文件相当满意

一旦到位,以下各项将按预期工作

go test -coverpkg=./... -coverprofile=coverage/go/coverage.out -v ./...
基于建议的思想

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]
go test -coverpkg=./... -coverprofile=coverage/go/coverage.out -v ./...