РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
994 of 1593 menu

Функция testing.Coverage

Функция testing.Coverage возвращает процент покрытия кода тестами в текущем процессе в виде числа типа float64. Она позволяет программно получить информацию о том, какая часть кода была выполнена во время запуска тестов. Функция полезна для автоматического отслеживания качества тестирования и генерации отчетов.

Синтаксис

testing.Coverage()

Функция не принимает параметров и возвращает значение типа float64, представляющее процент покрытия. Значение возвращается в диапазоне от 0 до 1, где 1 означает 100% покрытие.

Пример

Давайте создадим простую функцию и напишем тест для нее, затем получим процент покрытия:

package main import ( "fmt" "testing" ) func Sum(a, b int) int { return a + b } func TestSum(t *testing.T) { res := Sum(2, 3) if res != 5 { t.Errorf("Sum(2, 3) = %d; want 5", res) } } func main() { coverage := testing.Coverage() fmt.Printf("%.2f", coverage) }

Результат выполнения кода:

"0.00"

Обратите внимание: при обычном запуске программы без флагов покрытия функция возвращает 0.

Пример

Давайте запустим тесты с флагом -cover для получения реального процента покрытия:

package main import ( "fmt" "os" "testing" ) func IsPositive(x int) bool { return x > 0 } func TestIsPositive(t *testing.T) { tests := []struct { name string arg int want bool }{ {"positive", 5, true}, {"zero", 0, false}, {"negative", -3, false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if res := IsPositive(tt.arg); res != tt.want { t.Errorf("IsPositive(%d) = %v; want %v", tt.arg, res, tt.want) } }) } } func main() { if len(os.Args) > 1 && os.Args[1] == "-test.coverprofile" { coverage := testing.Coverage() fmt.Printf("%.2f", coverage) } }

Пример

Давайте используем функцию для вывода покрытия в процессе выполнения тестового пакета:

package main import ( "fmt" "testing" ) func Divide(a, b float64) float64 { if b == 0 { return 0 } return a / b } func TestDivide(t *testing.T) { if res := Divide(10, 2); res != 5 { t.Errorf("Divide(10, 2) = %v; want 5", res) } if res := Divide(10, 0); res != 0 { t.Errorf("Divide(10, 0) = %v; want 0", res) } } func TestCoverage(t *testing.T) { coverage := testing.Coverage() if coverage > 0 { fmt.Printf("Coverage: %.2f%%", coverage*100) } }

Результат выполнения кода:

"Coverage: 100.00%"

Смотрите также

  • функцию testing.CoverMode,
    которая возвращает режим покрытия кода
  • тип testing.B,
    который используется для бенчмарков
  • функцию testing.Short,
    которая проверяет запуск в сокращенном режиме
  • функцию testing.Verbose,
    которая проверяет подробный режим вывода
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить