#c #googletest
#c #googletest
Вопрос:
Я могу указать, как отображать содержимое объекта, если тест не удался. Чтобы сделать это, я определяю функцию PrintTo
для класса. Результат соответствует желаемому (строка MyObject as object
):
x.cpp:17: Failure
Value of: foo1
Expected: has foo <MyObject as object>
Actual: <MyObject as object> (of type Foo)
К сожалению, я не могу найти, как сделать то же самое для указателя на объект. Вместо пользовательской строки MyObject as pointer
я получаю вывод по умолчанию:
x.cpp:22: Failure
Value of: pfoo1
Expected: has foo 0x8058330
Actual: 0x8058320 (of type Foo*)
В качестве обходного пути я могу разыменовывать указатели, но я хотел бы знать, есть ли прямое решение, которое заключается в перегрузке PrintTo
указателя.
#include <gmock/gmock.h>
struct Foo { };
void PrintTo(const Fooamp; 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(amp;argc, argv);
return RUN_ALL_TESTS();
}
Комментарии:
1. Вы пробовали перегрузку as
void PrintTo(Foo* value, ::std::ostream* os)
?const
Здесь все может иметь значение.2. Или, может
PrintTo(Foo *const value, ::std::ostream *os)
быть?
Ответ №1:
Как было предложено @AndyG и @olaf-dietsche, ведущий const
должен быть удален. Они работают:
Foo* value
Foo* const value
И это не:
const Foo* value
const Foo* const value
const Foo*amp; value