Я новичок в модульном тестировании в C ++ с Catch2 . Наконец, я пытался реализовать пользовательский Matcher , чтобы проверить, совпадают ли поля данного объекта с теми, которые я предоставляю. Обсуждаемый объект должен выглядеть следующим образом:
class Book {
private:
int chapters;
int pages;
public:
int GetChapters();
int GetPages();
};
Мой тестер будет использоваться следующим образом в тестовом примере:
TEST_CASE("Books info is correct")
{
Book myBook;
CHECK_THAT(myBook, IsCorrect(5, 150));
CHECK_THAT(myBook, IsCorrect(10, 325));
}
Следуя примеру в документации, я намеревался:
// The matcher class
class BookCheck : public Catch::MatcherBase<Book> {
Book book;
int chapters = -1;
int pages = -1;
public:
BookCheck(int chapters, int pages) : chapters(chapters), pages(pages) {}
// Performs the test for this matcher
bool match( Book& b ) const override {
return b.GetChapters() == chapters && b.GetPages() == pages;
}
virtual std::string describe() const override {
ostringstream ss;
//ss << "is between " << m_begin << " and " << m_end; // TODO
return ss.str();
}
};
// The builder function
inline BookCheck IsCorrect(int chapters, int pages) {
return BookCheck(chapters, pages);
}
Когда я компилирую этот код, я получаю следующие ошибки:
ошибка: 'bool BookCheck :: match (Book &) const' помечен как 'переопределить', но не переопределить
ошибка: недопустимый абстрактный тип возвращаемого значения 'BookCheck'
ошибка: недопустимый абстрактный тип возвращаемого значения для функции 'BookCheck IsCorrect (int, int) '
ошибка: неверное приведение к абстрактному типу класса' BookCheck '
Не могли бы вы указать мне, что я делаю здесь неправильно?