TEST_CASE("Functions of Square")
{
std::array<Point, 4> a_Vertices{Point(2, 2), Point(2, 4), Point(4, 2), Point(4, 4)};
Square a_Square(a_Vertices, true);
SECTION("Square is initialized properly")
{
REQUIRE(a_Square.get_Vertex_0() == Point(2, 1));
}
}
Используя каркас модульного теста catch2, я хочу переопределить метод catch2 description, чтобы он выводил мой тип вместо {?} == {?}
Я также пытался это сделать через метод matcher
class Point_Matcher : public Catch::MatcherBase<Point>
{
private:
Point p_;
public:
Point_Matcher(const Point &a_Point)
: p_(a_Point) {}
bool match(Point const &a_Point) const override
{
return a_Point == p_;
}
virtual std::string describe() const override
{
std::ostringstream oss;
oss << "not the same as Point (" << p_.get_X() << ", " << p_.get_Y() << ")";
return oss.str();
}
};
inline Point_Matcher is_Same(const Point &a_Point)
{
return Point_Matcher(a_Point);
}
TEST_CASE("Functions of Square")
{
std::array<Point, 4> a_Vertices{Point(2, 2), Point(2, 4), Point(4, 2), Point(4, 4)};
Square a_Square(a_Vertices, true);
SECTION("Square is initialized properly")
{
REQUIRE_THAT(a_Square.get_Vertex_0(), is_Same(Point(2, 1)));
}
}
однако он будет показывать только объект, указанный в качестве теста, и не будет показывать тестируемый объект. Выходные данные будут {?} Не такими, как точка (2, 1)
в https://github.com/catchorg/Catch2/blob/master/docs/tostring.md#top Предлагаемый способ сделать это - переопределить оператор << из std :: ostream однако я не знаю, что я должен делать после перегрузки оператора. </p>
Заранее благодарен за ответ
Редактировать: Перегрузка для оператора << для точки Объект выглядит следующим образом: </p>
std::ostream &operator<<(std::ostream &os, const Point &p)
{
os << "Point (" << p.get_X() << ", " << p.get_Y();
return os;
}
Другими словами, выход, к которому я стремлюсь, в этом случае в конкретной точке (x, y) не совпадает с точкой (x, y)