провалить юнит-тесты, если охват ниже определенного процента - PullRequest
0 голосов
/ 01 мая 2018

Я создаю make-файл, который выполняет go test -cover. Можно ли выполнить команду make unit_tests, если охват ниже X? Как бы я это сделал?

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете использовать TestMain в своем тесте, чтобы сделать это. TestMain может выступать в качестве пользовательской точки входа в тесты, а затем вы можете вызвать testing.Coverage(), чтобы получить доступ к статистике покрытия.

Так, например, если вы хотите потерпеть неудачу на уровне ниже 80%, вы можете добавить это к одному из тестовых файлов вашего пакета:

func TestMain(m *testing.M) {
    // call flag.Parse() here if TestMain uses flags
    rc := m.Run()

    // rc 0 means we've passed, 
    // and CoverMode will be non empty if run with -cover
    if rc == 0 && testing.CoverMode() != "" {
        c := testing.Coverage()
        if c < 0.8 {
            fmt.Println("Tests passed but coverage failed at", c)
            rc = -1
        }
    }
    os.Exit(rc)
}

Тогда go test -cover вызовет эту точку входа, и у вас не получится:

PASS
coverage: 63.0% of statements
Tests passed but coverage failed at 0.5862068965517241
exit status 255
FAIL    github.com/xxxx/xxx 0.026s

Обратите внимание, что число, которое возвращает testing.Coverage(), меньше, чем то, что сообщает тест. Я посмотрел на код, и функция вычисляет его охват не так, как внутренние отчеты теста. Я не уверен, что является более "правильным".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...