如何实现自定义匹配器以检查 Catch2 中的对象相等性
How to implement a custom matcher to check for object equality in Catch2
我是 Catch2 C++的单元测试新手。最后,我尝试实现一个自定义匹配器来测试给定对象的字段是否与我提供的字段匹配。有问题的对象是这样的:
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"标记为"override",但不覆盖
错误:无效的抽象返回类型"BookCheck">
错误:函数"BookCheck"的抽象返回类型无效 IsCorrect(int, int('
错误:强制转换为抽象类类型无效 "图书检查">
你能指出我在这里做错了什么吗?
您的match
方法重写格式不正确。Catch::MatcherBase::match
将对象作为对 const 的引用,因此不会在方法主体中修改对象。Catch::MatcherBase::match
的签名是:
virtual bool match(ObjectT const& arg) const
因此,您的match
覆盖实现应该是:
bool match(Book const& b) const override {
return b.GetChapters() == chapters && b.GetPages() == pages;
}
此外,您需要标记您的Book
getterconst
以保持常量正确性:
int GetChapters() const;
int GetPages() const;
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 如何处理来自核心指南检查器的关于gsl::at的静态分析警告
- C++LDAP检查用户是否是特定组的成员
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 如何在多个 Catch2 测试用例中检查相同的条件