Есть ли возможность показывать только неудавшиеся тесты? Мне пришлось переключиться на использование гитары для этого, но я пропустил инструмент командной строки.
Настроить gtest, чтобы показать неудачный тест только в консоли
Ответ 1
Я столкнулся с той же проблемой, что и многие другие люди. Поэтому я создал это:
https://gist.github.com/elliotchance/8215283
Должно быть много пасты и игры.
Ответ 2
Есть два способа добиться этого.
Во-первых, напишите свой собственный слушатель событий:
Другой способ - отфильтровать входные данные, которые получает прослушиватель событий googletest.
Для этого подхода вы удаляете текущий прослушиватель событий и заменяете его своим собственным
testing::TestEventListeners& listeners = testing::UnitTest::GetInstance()->listeners();
testing::TestEventListener* listener = listeners.Release(listeners.default_result_printer());
listeners.Append(new FailurePrinter(listener));
где FailurePrinter - ваш собственный класс прослушивателя событий.
Этот класс должен выглядеть так
class FailurePrinter : public ::testing::TestEventListener {
public:
FailurePrinter(TestEventListener* listener) : TestEventListener() {_listener = listener;}
virtual void OnTestProgramStart(const UnitTest& unit_test);
virtual void OnTestIterationStart(const UnitTest& unit_test, int iteration);
virtual void OnEnvironmentsSetUpStart(const UnitTest& unit_test);
virtual void OnEnvironmentsSetUpEnd(const UnitTest& unit_test);
virtual void OnTestCaseStart(const TestCase& test_case);
virtual void OnTestStart(const TestInfo& test_info);
virtual void OnTestPartResult(const TestPartResult& result);
virtual void OnTestEnd(const TestInfo& test_info);
virtual void OnTestCaseEnd(const TestCase& test_case);
virtual void OnEnvironmentsTearDownStart(const UnitTest& unit_test);
virtual void OnEnvironmentsTearDownEnd(const UnitTest& unit_test);
virtual void OnTestIterationEnd(const UnitTest& unit_test, int iteration);
virtual void OnTestProgramEnd(const UnitTest& unit_test);
protected:
testing::TestEventListener* _listener;
};
Теперь вы должны реализовать все методы.
Если вам нравится, как слушатель событий googles печатает что-то, просто делегируйте вызов _listener.
Или вы можете изменить результат. Например:
void FailurePrinter::OnTestPartResult(const TestPartResult& test_part_result)
{
if (test_part_result.failed())
{
_listener->OnTestPartResult(test_part_result);
printf("\n");
}
}
будет печатать только тестовые ошибки.
Ответ 3
Я написал Google Test Pretty Printer, тестовый прослушиватель/красивый принтер для Google Test, чтобы обеспечить более чистый и привлекательный вывод консоли для Google Тестовые программы. Он включает опцию --failures-only
, которая должна делать то, что вы хотите.
Ответ 4
В соответствии с документацией вы можете изменить вывод, используя Test Events. Посмотрите здесь (есть также пример): https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#extending-googletest-by-handling-test-events
Ответ 5
Если вам нужно быстрое и грязное решение Python 2/3 только для неудачных тестов без внешних зависимостей: https://gist.github.com/DTasev/a894e4727eeaa94541d90ea1a3cc71a7. Он покажет неудачный тест + его вывод. Инструкция по использованию в docstring вверху файла
Для него требуется вывод по умолчанию gtest
, поэтому, если вы изменили его, он не будет работать.