【发布时间】:2020-02-06 15:07:44
【问题描述】:
我是使用 Catch2 在 C++ 中进行单元测试的新手。最后,我试图实现custom 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’
你能指出我在这里做错了什么吗?
【问题讨论】:
-
您链接到的示例使用
const参数作为match()。将Book&更改为const Book&有什么作用吗? coolprop.org/dev/_static/doxygen/html/…
标签: c++ unit-testing abstract-class catch2