В инете довольно много вопросов типа "как перенаправить вывод googletest с консоли в окно VS Output" от людей, которые пытаются подружить Visual Studio и googletest. Советы им дают самые разные, например, использовать PostBuildEvent или установить какой-нибудь плагин к Студии.
Хотя на мой взгляд самый удобный (гибкий, масштабируемый, переносимый) способ - это создать свою реализацию класса Printer и подключить её к фреймворку параллельно с остальными принтерами. Такой подход описан в примере №9 док-ции по GoogleTest Framework.
Сначала реализовать класс принтера, наследованный от EmptyTestEventListener
:
// Provides alternative output mode which produces minimal amount of // information about tests. class TersePrinter : public EmptyTestEventListener { void outDebugStringA (const char *format, ...) { va_list args; va_start( args, format ); int len = _vscprintf( format, args ) + 1; char *str = new char[len * sizeof(char)]; vsprintf(str, format, args ); OutputDebugStringA(str); delete [] str; } // Called after all test activities have ended. virtual void OnTestProgramEnd(const UnitTest& unit_test) { outDebugStringA("TEST %s\n", unit_test.Passed() ? "PASSED" : "FAILED"); } // Called before a test starts. virtual void OnTestStart(const TestInfo& test_info) { outDebugStringA( "*** Test %s.%s starting.\n", test_info.test_case_name(), test_info.name()); } // Called after a failed assertion or a SUCCEED() invocation. virtual void OnTestPartResult(const TestPartResult& test_part_result) { outDebugStringA( "%s in %s:%d\n%s\n", test_part_result.failed() ? "*** Failure" : "Success", test_part_result.file_name(), test_part_result.line_number(), test_part_result.summary()); } // Called after a test ends. virtual void OnTestEnd(const TestInfo& test_info) { outDebugStringA( "*** Test %s.%s ending.\n", test_info.test_case_name(), test_info.name()); } }; // class TersePrinter
Теперь подключить к юнит тестам вместе с другими принтерами:
UnitTest& unit_test = *UnitTest::GetInstance(); TestEventListeners& listeners = unit_test.listeners(); listeners.Append(new TersePrinter);
Всё. Теперь результаты будут выводиться без проблем и в окно Output, и в консоль, и куда-то еще, если подключены дополнительные принтеры. Формат вывода можно изменять по своему вкусу. Кроме этого, по клику в окне Output можно будет "прыгать" на код "свалившегося" теста.
Хм... судя по:
ОтветитьУдалитьstatic void PrintTestPartResult(const TestPartResult& test_part_result) {
...
#if GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_MOBILE
// We don't call OutputDebugString*() on Windows Mobile, as printing
// to stdout is done by OutputDebugString() there already - we don't
// want the same message printed twice.
::OutputDebugStringA(result.c_str());
::OutputDebugStringA("\n");
#endif
}
Google Test (1.6.0) и так это делает, по умолчанию, если правильно собрана под Windows.
Спорить не буду, вполне возможно. Однако на практике собранная под Windows в режиме "по умолчанию" почему-то этого не делает.
УдалитьИнстраграмм остается самой популярной на данный момент площадкой для продвижения своего бизнеса. Но, как показывает практика, люди гораздо чаще подписываются на профили в которых уже достаточное количество подписчиков. В случае если заниматься продвижение своими силами, потратить на это можно очень немало времени, потому гораздо лучше обратиться к специалистам из Krutiminst.ru по ссылке https://postheaven.net/prohoster7/prosmotry-v-instagram
ОтветитьУдалить