Имеется некоторый автоматически сгенерированный код 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
*.validate.go
происходит от envoyproxy / proto c -gen-validate, а *.pb.go
& *.pb.gw.go
- от protobuf и grp c библиотеки. other1
и other2
- это две вспомогательные библиотеки, которые мы включили вместе с сгенерированным кодом, чтобы упростить работу клиентских приложений. Серверная часть находится в отдельном репо и импортирует по мере необходимости.
Поскольку полезно иметь возможность удалить /pkg/<name>
перед повторным запуском prototool, я поместил несколько тестов 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]
Просмотр итогового покрытия / go / cover.out не содержит упоминания о чем-либо в <pkgname>/pkg/<name>/v1
Выполняется.
Я не привязан к текущему макету за исключением того, что <pkgname>/pkg/<name>/v1
автоматически управляется протоколом prototool, и его правила именования сгенерированных файлов. Хотелось бы убедиться, что другие наши модули могут быть экспортированы для использования в качестве вспомогательных библиотек, и я хотел бы иметь возможность добавлять тесты для <pkgname>/pkg/<name>/v1
без необходимости размещать их в том же каталоге, чтобы можно было легко удалять + воссоздавать сгенерированные файлы, в то же время получая разумные отчеты о покрытии.
Я попытался поиграться с пакетами, переданными в -coverpkg
и заменив ./...
в командной строке, и не смог придумать что-то такое, что работает. Возможно, я просто не знаком с правильным вызовом?
Кроме того, есть ли другой макет, который позаботится об этом для меня?