Go: неправильное покрытие, когда нет тестов для пакета - PullRequest
3 голосов
/ 24 января 2020

У меня есть Go проект со следующей структурой:

foo/foo.go
foo/foo_test.go
main.go

Как вы заметили, для main.go.

теста нет. Я собираю отчет о покрытии с использованием следующая команда:

go test ./foo ./ -coverprofile=coverage.txt -covermode=atomic

Здесь ./foo и ./ показывают, где искать пакеты.

Проблема: Я отправляю отчет о покрытии на codecov.io что показывает, что мой код на 100% покрыт тестами. Но это не так, поскольку у моего main.go вообще нет тестов.

Кажется, что система считает только те пакеты, которые явно указывают тестовые файлы.

Вопрос: Как исправить отчет о покрытии так, чтобы он учитывал информацию о непроверенных пакетах?

Примечание: Мой проект можно найти на GitHub и реальной статистике. c здесь здесь . Проект имеет другую структуру, но проблема сохраняется (неправильное освещение).

Ответы [ 2 ]

2 голосов
/ 25 января 2020

Флаг -coverpkg может использоваться для указания пакетов, которые используются в качестве основы анализа покрытия.

Цитирование из Команда go: Флаги тестирования:

-coverpkg pattern1,pattern2,pattern3
    Apply coverage analysis in each test to packages matching the patterns.
    The default is for each test to analyze only the package being tested.
    See 'go help packages' for a description of package patterns.
    Sets -cover.

Итак, в вашем конкретном примере c это будет сделано:

go test -coverpkg=.,./foo -coverprofile=coverage.txt -covermode=atomic . ./foo

Чтобы применить его ко всему модулю / проекту, вы можете использовать:

go test -coverpkg=./... -coverprofile=coverage.txt -covermode=atomic ./...

Другой вариант - поместить «пустой» тестовый файл в папки пакетов, в которых в данный момент нет тестового файла. Таким образом, они будут естественным образом включены в анализ покрытия по умолчанию, но, очевидно, от них ничего не будет покрыто.

См. Соответствующее обсуждение на github:

cmd / go: go test -cover & go test -coverprofile всегда должен выводить покрытие # 24570

1 голос
/ 25 января 2020

попробуйте это:

go test -coverpkg=./... -race -coverprofile=coverage.txt -covermode=atomic ./..

enter image description here

...