C++ 减少gtest的输出,使其看起来类似于cxxtest的输出
我有一组使用gtest作为框架的单元测试 生成并执行,输出如下所示: 我希望输出与使用cxxunit时的输出类似(C++ 减少gtest的输出,使其看起来类似于cxxtest的输出,c++,googletest,C++,Googletest,我有一组使用gtest作为框架的单元测试 生成并执行,输出如下所示: 我希望输出与使用cxxunit时的输出类似(测试通过时,详细说明失败时的错误)。如果可能的话,用颜色 如何做到这一点 如果我不清楚,我正在寻找代码和确切的方法如何做到这一点 输出应该类似于: Executing dummy_tests ..... ../code/app/unit_tests/unittest_dummy.cpp:25: Failure Value of: 2 Expected: 1 .. FAILED
测试通过时,详细说明失败时的错误)。如果可能的话,用颜色
如何做到这一点
如果我不清楚,我正在寻找代码和确切的方法如何做到这一点
输出应该类似于:
Executing dummy_tests .....
../code/app/unit_tests/unittest_dummy.cpp:25: Failure
Value of: 2
Expected: 1
..
FAILED
我正在尝试使用和创建自定义侦听器。但是这个例子没有彩色的输出,它将大量的消息打印到输出中 对于彩色输出,开发人员实现了
ColoredPrintf()
函数
至于我面临的特殊问题是缺乏文件:
- 如何在程序开始时获取有关整个测试套件的信息?(我猜是在
方法中)OnTestProgramStart()
- 如何获取测试是否失败的信息?(
?或其他方法?)OnTestProgramEnd()
OnTestProgramStart()
或更高版本中枚举测试用例和测试:
UnitTest& unit_test = *UnitTest::GetInstance();
for (int i = 0; i < unit_test.total_test_case_count(); ++i) {
const TestCase& test_case = *unit_test.GetTestCase(i);
for (int j = 0; j < test_case.total_test_count(); ++j) {
const TestInfo& test_info = *test_case.GetTestInfo(j);
fprintf(stdout, "%s.%s\n", test_case.name().c_str(),
test_info.name().c_str());
}
}
ColoredPrintf()
在外部不可用;您可以将其代码复制到您的项目中。链接到该示例将提供更多信息和我缺少的一些信息。
帮助我获得种子价值
标题看起来像:
#ifndef UNITTESTS_CXXLISTENER_HPP
#define UNITTESTS_CXXLISTENER_HPP
#include "gtest/gtest.h"
class CxxTestPrinter : public ::testing::EmptyTestEventListener
{
virtual void OnTestProgramStart( const ::testing::UnitTest& unit_test );
virtual void OnTestIterationStart( const ::testing::UnitTest& unit_test, int iteration );
virtual void OnTestPartResult( const ::testing::TestPartResult& test_part_result );
virtual void OnTestEnd( const ::testing::TestInfo& test_info );
virtual void OnTestIterationEnd( const ::testing::UnitTest& unit_test, int );
virtual void OnTestProgramEnd( const ::testing::UnitTest& unit_test );
};
#endif
和源文件:
#include "unittests_cxxlistener.hpp"
#include <iostream>
namespace testing {
namespace internal
{
enum GTestColor
{
COLOR_DEFAULT,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW
};
void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
using namespace testing::internal;
void CxxTestPrinter::OnTestProgramStart( const ::testing::UnitTest& unit_test )
{
std::cout << "Executing unit tests in " << unit_test.original_working_dir() << std::endl;
}
void CxxTestPrinter::OnTestIterationStart( const ::testing::UnitTest& , int iteration )
{
std:: cout << "Executing unit tests iteration " << iteration << " : ";
}
void CxxTestPrinter::OnTestPartResult( const ::testing::TestPartResult& test_part_result )
{
if ( test_part_result.failed() )
{
std::cout << "\n\nFailure in " << test_part_result.file_name() << " : line " << test_part_result.line_number() << std::endl
<< test_part_result.summary() << std::endl << std::endl;
}
}
void CxxTestPrinter::OnTestEnd( const ::testing::TestInfo& test_info )
{
if ( test_info.result()->Passed() )
{
ColoredPrintf( COLOR_GREEN, "." );
}
}
void CxxTestPrinter::OnTestIterationEnd(const ::testing::UnitTest& unit_test, int )
{
if ( unit_test.Passed() )
{
ColoredPrintf( COLOR_GREEN, " OK\n" );
}
else
{
ColoredPrintf( COLOR_RED, " FAILED\n" );
}
}
void CxxTestPrinter::OnTestProgramEnd( const ::testing::UnitTest& unit_test )
{
if ( unit_test.Failed() )
{
std::cout << "Some unit tests failed. test_random_seed = 0x" << std::hex << unit_test.random_seed() << std::endl;
}
}
#包括“unittests\u cxlistener.hpp”
#包括
命名空间测试{
命名空间内部
{
枚举GTESTCLOR
{
颜色默认值,
红色,
绿色,
黄色
};
void ColoredPrintf(GTestColor color,const char*fmt,…);
}
}
使用名称空间测试::内部;
void CxxTestPrinter::OnTestProgramStart(常量::测试::单元测试和单元测试)
{
标准::cout
#include "unittests_cxxlistener.hpp"
#include <iostream>
namespace testing {
namespace internal
{
enum GTestColor
{
COLOR_DEFAULT,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW
};
void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
using namespace testing::internal;
void CxxTestPrinter::OnTestProgramStart( const ::testing::UnitTest& unit_test )
{
std::cout << "Executing unit tests in " << unit_test.original_working_dir() << std::endl;
}
void CxxTestPrinter::OnTestIterationStart( const ::testing::UnitTest& , int iteration )
{
std:: cout << "Executing unit tests iteration " << iteration << " : ";
}
void CxxTestPrinter::OnTestPartResult( const ::testing::TestPartResult& test_part_result )
{
if ( test_part_result.failed() )
{
std::cout << "\n\nFailure in " << test_part_result.file_name() << " : line " << test_part_result.line_number() << std::endl
<< test_part_result.summary() << std::endl << std::endl;
}
}
void CxxTestPrinter::OnTestEnd( const ::testing::TestInfo& test_info )
{
if ( test_info.result()->Passed() )
{
ColoredPrintf( COLOR_GREEN, "." );
}
}
void CxxTestPrinter::OnTestIterationEnd(const ::testing::UnitTest& unit_test, int )
{
if ( unit_test.Passed() )
{
ColoredPrintf( COLOR_GREEN, " OK\n" );
}
else
{
ColoredPrintf( COLOR_RED, " FAILED\n" );
}
}
void CxxTestPrinter::OnTestProgramEnd( const ::testing::UnitTest& unit_test )
{
if ( unit_test.Failed() )
{
std::cout << "Some unit tests failed. test_random_seed = 0x" << std::hex << unit_test.random_seed() << std::endl;
}
}