Ich kann angeben, wie der Inhalt eines Objekts angezeigt wird, wenn ein Test fehlgeschlagen ist. Um dies zu tun, definiere ich die Funktion PrintTo
für die Klasse. Das Ergebnis ist, wie gewünscht (die Zeichenfolge MyObject as object
):PrintTo für einen Zeiger in Google Test
x.cpp:17: Failure
Value of: foo1
Expected: has foo <MyObject as object>
Actual: <MyObject as object> (of type Foo)
Leider kann ich nicht finden, wie man das gleiche für das Objekt für einen Zeiger zu tun. Anstelle der benutzerdefinierten Zeichenfolge MyObject as pointer
Ich erhalte die Standard-Ausgabe:
x.cpp:22: Failure
Value of: pfoo1
Expected: has foo 0x8058330
Actual: 0x8058320 (of type Foo*)
Als Abhilfe, die ich dereferenzieren den Zeiger kann, aber ich würde gerne wissen, ob es eine direkte Lösung, die PrintTo
auf einem Zeiger zu überlasten ist .
#include <gmock/gmock.h>
struct Foo { };
void PrintTo(const Foo& value, ::std::ostream* os) {
*os << "<MyObject as object>";
}
void PrintTo(const Foo* value, ::std::ostream* os) {
*os << "<MyObject as pointer>";
}
MATCHER_P(HasFoo, expected, "") { return false; }
TEST(Foo, Object) {
Foo foo1, foo2;
ASSERT_THAT(foo1, HasFoo(foo2));
}
TEST(Foo, Pointer) {
Foo *pfoo1 = new Foo(), *pfoo2 = new Foo();
ASSERT_THAT(pfoo1, HasFoo(pfoo2));
}
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Haben Sie versucht, "void PrintTo (Foo * value, :: std :: ostream * os)" zu überladen? Das "const" könnte hier den Unterschied machen. – AndyG
Oder vielleicht 'PrintTo (Foo * const Wert, :: std :: ostream * os)'? –