コードの単体テストに Google C++ Testing Framework を使用します。 Eclipse CDT with C++ Unit Testing Module を出力分析に使用します。
以前は CppUnit マクロファミリを使用していました CPPUNIT * _MESSAGE これは次のように呼び出すことができます:
CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE)
また、テスト出力にカスタムメッセージを送信できます。
Googleテスト出力にカスタムテキストを含める方法はありますか?
(できれば、Google Testを使用した自動化された単体テスト用に既存のプログラムによって読み取られるデータへのメッセージを含めることができる方法。)
Gtestマクロは、テストが失敗したときに診断メッセージを出力するためのストリームを返します。
EXPECT_TRUE(false) << "diagnostic message";
Gtestの現在のバージョンでは、きれいに実行する方法はありません。コードを見て、fail testの場合、テキスト出力(gtestの「メッセージ」にラップされている)のみが表示されます。
ただし、ある時点でgtestが画面にprintf
'ingを開始し、そのレベルを超えてプラットフォームに依存しない色を取得できます。
以下は、あなたがやりたいことをするためのハッキングされたマクロです。これは、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 にあります。
マーク・ラカタの答えを参照してください、ここに私の方法があります:
手順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_ */
ステップ2:gtestでGOUT
を使用
使用法:
#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;