Google C ++ 테스트 프레임 워크에서 사용자 지정 메시지를 보내는 방법은 무엇입니까?
내 코드의 단위 테스트를 위해 Google C ++ 테스트 프레임 워크 를 사용 합니다. 출력 분석을 위해 C ++ 단위 테스트 모듈과 함께 Eclipse CDT를 사용 합니다.
이전에는 CppUnit 을 사용 했는데 다음과 같이 호출 할 수있는 매크로 계열 CPPUNIT * _MESSAGE 가 있습니다.
CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE)
그리고 테스트 출력에 사용자 지정 메시지를 보낼 수 있습니다.
Google 테스트 출력에 일부 사용자 지정 텍스트를 포함하는 방법이 있습니까?
(구글 테스트를 사용하여 자동화 된 단위 테스트를 위해 기존 프로그램에서 읽은 데이터에 대한 메시지를 포함 할 수있는 방법이 좋습니다.)
gtest 매크로는 테스트가 실패 할 때 진단 메시지를 출력하기위한 스트림을 반환합니다.
EXPECT_TRUE(false) << "diagnostic message";
현재 버전의 gtest에서는 깔끔하게 수행 할 수있는 방법이 없습니다. 코드를 살펴본 결과 테스트에 실패 하면 텍스트 출력 (gtest "Messages"로 래핑 됨) 만 표시됩니다 .
그러나 어느 시점에서 gtest가 printf
화면에 나타나기 시작 하고 그 이상의 수준을 활용하여 플랫폼에 독립적 인 색상을 얻을 수 있습니다.
다음은 원하는 작업을 수행 할 수있는 해킹 된 매크로입니다. gtest 내부 텍스트 색상을 사용합니다. 물론 internal::
네임 스페이스는 경고음을 울려 야하지만, 작동합니다.
용법:
TEST(pa_acq,Foo)
{
// C style
PRINTF("Hello world \n");
// or C++ style
TEST_COUT << "Hello world" << std::endl;
}
산출:
암호:
namespace testing
{
namespace internal
{
enum GTestColor {
COLOR_DEFAULT,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW
};
extern void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
#define PRINTF(...) do { testing::internal::ColoredPrintf(testing::internal::COLOR_GREEN, "[ ] "); testing::internal::ColoredPrintf(testing::internal::COLOR_YELLOW, __VA_ARGS__); } while(0)
// C++ stream interface
class TestCout : public std::stringstream
{
public:
~TestCout()
{
PRINTF("%s",str().c_str());
}
};
#define TEST_COUT TestCout()
이 매우 간단 (내부 클래스로 다이빙의 필요없이 또는 새로운 사용자 정의 클래스를 만드는) 그 일을 및 해키 방법.
매크로를 정의하면됩니다.
#define GTEST_COUT std::cerr << "[ ] [ INFO ]"
테스트에서 GTEST_COUT
(와 같이 cout
) 사용 하십시오.
GTEST_COUT << "Hello World" << std::endl;
그리고 다음과 같은 결과를 볼 수 있습니다.
그의 발견에 대한 크레딧은 @Martin Nowak 에게 돌아갑니다 .
Mark Lakata의 답변을 참조하십시오.
1 단계 : 헤더 파일을 만듭니다. 예 : gtest_cout.h
암호:
#ifndef _GTEST_COUT_H_
#define _GTEST_COUT_H_
#include "gtest/gtest.h"
namespace testing
{
namespace internal
{
enum GTestColor
{
COLOR_DEFAULT, COLOR_RED, COLOR_GREEN, COLOR_YELLOW
};
extern void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
#define GOUT(STREAM) \
do \
{ \
std::stringstream ss; \
ss << STREAM << std::endl; \
testing::internal::ColoredPrintf(testing::internal::COLOR_GREEN, "[ ] "); \
testing::internal::ColoredPrintf(testing::internal::COLOR_YELLOW, ss.str().c_str()); \
} while (false); \
#endif /* _GTEST_COUT_H_ */
Step2 : GOUT
gtest에서 사용
용법:
#include "gtest_cout.h"
TEST(xxx, yyy)
{
GOUT("Hello world!");
}
다음을 정의해야합니다.
static class LOGOUT {
public:
LOGOUT() {}
std::ostream& info() {
std::cout << "[info ] ";
return std::cout;
}
} logout;
이것을 사용하여 :
logout.info() << "test: " << "log" << std::endl;
'programing' 카테고리의 다른 글
Django의 "단순한 모듈 없음"오류 (0) | 2020.11.19 |
---|---|
잘못된 mysql 클라이언트 라이브러리 용으로 컴파일 된 mysql2 gem (0) | 2020.11.19 |
iOS 7 : "레이블-레이블"에 대한 잘못 배치 된 뷰 프레임이 런타임에 달라짐 (0) | 2020.11.19 |
TabLayout에서 선택한 탭의 아이콘 색상을 어떻게 변경합니까? (0) | 2020.11.19 |
ctrl + shift + f를 사용하여 VSCode에서 선택한 코드를 들여 쓰거나 서식을 지정하는 방법 (0) | 2020.11.19 |