Как легко узнать, какие тесты не пройдены - PullRequest
0 голосов
/ 01 марта 2019

Я тестирую свой код с помощью go test ./... -v -short.

К сожалению, -v только распечатывает каждый тест в том виде, как он происходит, но не оставляет сводку результатов в нижней части, как в Java.Это означает, что если какой-либо тест не удался где-то вверху, мне нужно прокрутить вверх и найти слово FAIL или найти его в текстовом редакторе.

Флаг -failfast тоже не помогаетпотому что некоторые из моих тестов по какой-то причине все еще печатаются после первого неудачного теста.

Мне все равно, будут ли тесты запускаться после неудачного первого теста.Я просто хочу, чтобы можно было легко определить, был ли любой тест пройден неудачно, предпочтительно только в одном месте (например, краткая информация о том, сколько тестов прошло или не прошло, или увидеть флаг, если всетесты пройдены или нет).

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

I 'm в Windows 10 64-bit.

ОБНОВЛЕНИЕ: Большое спасибо @icza за подсказку findstr.Позже я понял, что я также хотел видеть описания ошибок вместе с ошибками теста, но не хотел запускать go test дважды.Вот что я придумал для CMD (не работает на Powershell):

go test ./... -v -short > test-results.txt & findstr "FAIL _test" test-results.txt

Теперь findstr должен сообщать о сбоях теста, а также об ошибках.И если вы хотите увидеть полные результаты теста, просто откройте test-results.txt.

1 Ответ

0 голосов
/ 01 марта 2019

Неудачные испытания обозначены FAIL на выходе.Поэтому все, что вам нужно сделать, это отфильтровать вывод для этого слова.

В системах Unix:

go test ./... |grep FAIL

В Windows:

go test ./... |findstr FAIL

Обратите внимание, что это чистообработка текста, он ничего не знает о тестах и ​​их результатах.Это означает, что вы можете получить «ложные срабатывания», если тест выведет слово FAIL, даже если оно выполнится успешно.Но на практике это в значительной степени делает ту работу, которую вы хотите.

Более изощренный и более точный способ добиться этого - передать флаг -json в go test, чтобы он генерировал вывод JSON, который выможет обрабатывать с помощью программы (например, написано в самом Go).Неудачные тесты обозначаются объектом JSON, имеющим поле "Action":"fail", например,

{"Time":"2019-03-01T12:06:21.108544405+01:00","Action":"fail",
 "Package":"some/package","Test":"TestSomething","Elapsed":0.01}

. И даже если вы не хотите писать программу для этого, фильтрация вывода JSON оставляет меньше шансов для ложного срабатывания.(фильтрация по "Action":"fail"):

Unix:

go test ./... -json |grep '"Action":"fail"'

Windows:

go test ./... -json |findstr /C:"\"Action\":\"fail\""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...