Czy istnieje opcja wyświetlania tylko testów zakończonych niepowodzeniem? Aby to osiągnąć, musiałem przejść na Gitarę, ale brakuje mi narzędzia wiersza poleceń.Skonfiguruj test seryjny, aby wyświetlić test zakończony niepowodzeniem tylko w konsoli
Odpowiedz
Zgodnie z dokumentacją można zmienić dane wyjściowe za pomocą zdarzeń testowych. Spójrz tutaj (istnieje również przykład): https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#extending-google-test-by-handling-test-events
Istnieją dwa sposoby osiągnięcia tego.
Pierwszy to napisać własny detektor zdarzeń:
http://code.google.com/p/googletest/wiki/V1_6_AdvancedGuide#Defining_Event_Listeners
Innym sposobem jest filtrowanie wpisze googletest detektor odbiera.
Do tego approache usunąć bieżący detektor zdarzeń i wymieniać je z własnej
testing::TestEventListeners& listeners = testing::UnitTest::GetInstance()->listeners();
testing::TestEventListener* listener = listeners.Release(listeners.default_result_printer());
listeners.Append(new FailurePrinter(listener));
gdzie FailurePrinter jest własne klasy detektor zdarzeń.
Ta klasa powinna wyglądać następująco
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;
};
Teraz trzeba zaimplementować wszystkie metody.
Jeśli podoba Ci się sposób, w jaki detektor zdarzeń google odbierze coś, wystarczy przekazać połączenie do _listener.
Lub możesz zmodyfikować wynik. Na przykład:
void FailurePrinter::OnTestPartResult(const TestPartResult& test_part_result)
{
if (test_part_result.failed())
{
_listener->OnTestPartResult(test_part_result);
printf("\n");
}
}
wydrukuje tylko Testfailures.
Wpadłem na ten sam problem - jak jestem pewien, wielu innych ludzi. Więc stworzyłem to:
https://gist.github.com/elliotchance/8215283
Powinno być dość dużo pasty i grać.
Napisałem Google Test Pretty Printer, słuchacza testowego/ładną drukarkę do testu Google, aby zapewnić czystsze i bardziej atrakcyjne wyniki konsoli dla programów testowych Google. Zawiera opcję --failures-only
, która powinna zrobić to, co chcesz.
To powinna być zaakceptowana odpowiedź – Purefan