Wie sende ich eine benutzerdefinierte Nachricht in Google C++ Testing Framework?

Wie sende ich eine benutzerdefinierte Nachricht in Google C++ Testing Framework?

Die gtest-Makros geben einen Stream zur Ausgabe von Diagnosemeldungen zurück, wenn ein Test fehlschlägt.

EXPECT_TRUE(false) << "diagnostic message";

In der aktuellen Version von gtest gibt es keine Möglichkeit, dies sauber zu tun. Ich habe mir den Code angesehen, und die einzige Textausgabe (in gtest "Messages" verpackt) wird angezeigt, wenn Sie fehlschlagen ein Test.

Irgendwann startet gtest jedoch printf auf den Bildschirm, und Sie können die Ebene darüber nutzen, um Farben zu erhalten, die plattformunabhängig sind.

Hier ist ein gehacktes Makro, um zu tun, was Sie wollen. Dies verwendet die gtest-interne Textfärbung. Natürlich die internal:: namespace sollte bei Alarm schlagen, aber hey, es funktioniert.

Verwendung:

TEST(pa_acq,Foo)
{
  // C style
  PRINTF("Hello world \n");

  // or C++ style

  TEST_COUT << "Hello world" << std::endl;
}

Ausgabe:

Code:

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()

Es gibt eine ganz einfache und hackige Art, dies zu tun (ohne in interne Klassen einzutauchen oder neue benutzerdefinierte Klassen zu erstellen).

Definieren Sie einfach ein Makro:

#define GTEST_COUT std::cerr << "[          ] [ INFO ]"

und verwenden Sie GTEST_COUT (genauso wie cout ) in Ihren Tests :

GTEST_COUT << "Hello World" << std::endl;

Und Sie werden ein solches Ergebnis sehen:

Dank geht an @Martin Nowak für seine Entdeckung.