106

コードの単体テストにGoogle C++ Testing Frameworkを使用しています。出力分析には、 Eclipse CDT と C++ ユニット テスト モジュールを使用します。

以前は、次のように呼び出すことができるマクロ ファミリ CPPUNIT*_MESSAGEを持つCppUnitを使用していました。

CPPUNIT_ASSERT_EQUAL_MESSAGE("message",EXPECTED_VALUE,ACTUAL_VALUE)

また、テスト出力にカスタム メッセージを送信できます。

Google テスト出力にカスタム テキストを含める方法はありますか?

(できれば、Google テストを使用した自動化された単体テストのために、既存のプログラムによって読み取られるデータへのメッセージを含めることができる方法です。)

4

6 に答える 6

191

The gtest macros return a stream for outputting diagnostic messages when a test fails.

EXPECT_TRUE(false) << "diagnostic message";
于 2013-05-10T22:50:41.443 に答える
61

現在のバージョンの 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()
于 2015-03-19T21:52:44.650 に答える
3

以下を定義する必要があります。

static class LOGOUT {
public:
    LOGOUT() {}
    std::ostream&  info() {
        std::cout << "[info      ] ";
        return std::cout;
    }

} logout;

これを使用して:

logout.info() << "test: " << "log" << std::endl;
于 2017-05-17T01:56:36.907 に答える