问题标签 [catch2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
735 浏览

c++ - 不能在 Catch 测试中使用重载比较运算符

我有一个使用 Catch 2.11.1 的简​​单单元测试:

上述简单程序会产生以下错误:

[在此之后还有更多消息......]

错误消息的关键部分是这一行:

从错误消息中可以清楚地看出,它是被调用的标准std::operator==函数,而不是我的重载函数。std::pairoperator==

如果我不在CatchREQUIRE宏中进行比较,那么它可以工作:

现在这是 Catch 的问题,还是我的操作员函数的问题?


注意:我正在使用最近构建的 GCC 9.2 构建 Debian SID

0 投票
1 回答
417 浏览

c++ - 如何实现自定义匹配器以检查 Catch2 中的对象相等性

0 投票
1 回答
986 浏览

c++ - 不要在 Catch2 测试用例中组合生成器

Catch2我想在一个测试用例中使用多个生成器。我的问题是,当有两个以上的生成器时,它们是“组合的”。所以如果我写这样的东西:

这将产生四个测试用例:( startPos[0] vs expectedMoves[0], startPos[0] vs expectedMoves[1], startPos[1] vs expectedMoves[0], startPos[1] vs startPos[1])。

然而,我只想要两个:(startPos[0] vs expectedMoves[0]startPos[1] vs startPos[1])。

有没有办法以优雅和可读的方式做到这一点?我想避免这样的事情:

由于维护这种怪物很麻烦。

编辑:我不太喜欢这个解决方案: https ://github.com/catchorg/Catch2/blob/ce42deb72fab2be85a862f559984580c24cb76c4/projects/SelfTest/UsageTests/Generators.tests.cpp#L199

0 投票
1 回答
678 浏览

c++ - 如何使用重载的相等(==)运算符向测试用例添加描述?

使用 catch2 单元测试框架,我想覆盖 catch2 describe 方法,以便它打印出我的类型而不是 {?} == {?}

我也试过通过 matcher 方法来做

但是,它只会显示指定为测试的对象,而不会显示正在测试的对象。输出将是 {?} 与 Point(2, 1) 不同

https://github.com/catchorg/Catch2/blob/master/docs/tostring.md#top 建议的方法是覆盖 std::ostream 的运算符<<,但是,我不知道重载运算符后我应该做什么。

预先感谢您的回答

编辑: 点对象的 operator<< 的重载如下

换句话说,在这种情况下,我的目标输出特别是 Point(x, y) 与 Point(x,y) 不同

0 投票
0 回答
388 浏览

c++ - Catch2 C++ 链接器问题——包括类的未定义符号

从事 C++ 学校项目。似乎无法让 catch2 测试正常工作。

我有一个makefile,我在其中编译我的项目

当此行运行时,clang++ --std=c++11 -o A2test Test_PriorityQueue.cpp我收到此错误:

这是测试文件的代码—— Test_PriorityQueue.cpp :

当我注释掉最后一个“创建 PQ”时,前几个测试运行得很好。一旦我包含这些,我就会开始收到这些未定义的符号错误。一段时间以来一直在抨击我的头。一些帮助将不胜感激!

编辑:

模拟.h

Simulation.cpp 构造函数:

0 投票
1 回答
169 浏览

c++ - 如何修复 tromeloeil 中的“RETURN missing for non-void function”错误?

我试图弄清楚如何将 Trompeloeil 库与 C++11 一起使用。在这个例子中,我遇到了大量的构建错误,我不明白为什么。

有大量的构建错误,但对我来说突出的错误如下:

如果有人可以帮助我理解这些,将不胜感激。我可以根据要求提供完整的构建错误

0 投票
0 回答
212 浏览

c++ - Catch2 替代部分行为

我正在使用 Catch2,并且我正在尝试构建一个测试用例,该测试用例在部分之前进行复杂的设置,在列表中由 MyObject 实例的初始化表示。

我喜欢部分的想法,因为它们将测试分开,但我想避免在每个部分之前初始化 MyObject,这可能吗?

0 投票
1 回答
435 浏览

c++ - 为什么这会导致Seg。故障,如何使用 GDB 调试它?

代码本身非常简单。我正在使用Catch2进行单元测试,(我真的很喜欢它的界面)并闯入gdb,但没有获得 Seg 的有用信息。所述简单代码引发的错误。

我确切地知道是什么导致了这个问题,但我不知道为什么,或者我会如何得到有问题的代码行gdb(我已经广泛使用 Python 等价物,pdb但 Python 中的错误似乎是更直接)。

翻牌.hpp

翻牌.cpp

test_Flop.cpp

main.cpp包含它应该包含的所有内容,以及下载的catch.hpp(按照教程的说明)。

我用: 编译g++ Flop.cpp test_Flop.cpp main.cpp -o run_test它并用 运行它gdb -ex run --args ./run_test -b,这允许 Catch2 进入调试器。结果是这样的:

使用回溯:

行。因此,SIGSEGV表明我们尝试读取/写入进程无权访问的内存。如果在Flop.hpp中,我改为说int tiles_[10][10][10],那么一切正常。那么设置tiles_为更大的大小是在某种程度上保留了一块无法访问的内存吗?我是 C++ 的新手(因此当我编写某些东西时,我实际上是在思考计算机中发生了什么)所以如果我错了请纠正我,但int tiles_[200][200][200]不应该占用超过 32MB 的内存,对吧?

因此,我有几个问题:

  • 为什么这会导致分段错误?
  • 我怎样才能gdb让我进入有问题的代码行?这段代码的未简化版本总共有几百行。幸运的是,我的问题出现在班级定义的早期,但是将所有内容注释掉并(煞费苦心地)逐行取消注释仍然需要一段时间,这就是gdb要防止的!
0 投票
1 回答
467 浏览

c++ - Catch2:测试崩溃,因为封装在 REQUIRE_THROWS 中的调用抛出异常

我使用 catch2 作为单元测试框架。一个测试用例应该检查函数调用是否导致抛出异常,所以我基本上写

会发生什么:函数抛出并且测试崩溃。查看调用堆栈,我发现崩溃是由于在调用我的 throwing 成员函数时引发的异常而发生的。这里可能出了什么问题,所以抛出的异常不会被 REQUIRE_THROWS 捕获,而是使整个测试崩溃?

编辑:由于这是一个复杂且封闭源代码的项目,因此我无法为该问题提供一个最小且可重现的示例。但是,也许有人遇到了类似的错误,并且可以假设可能导致这种行为的原因。

0 投票
1 回答
360 浏览

c++ - 为什么我在 catch2 测试中收到此 SIGSEGV 信号?

我目前正在学习 c++,作为练习,我一直在尝试实现链表数据结构。我在 Catch2 中为它编写测试,我不断收到一个 SIGSEGV 信号,我不知道为什么。

这是我的链表头文件:

这是我的链表实现文件:

这是我的 catch2 测试:

我得到 SIGSEGV 信号的测试是SECTION("can append values"),但是如果我删除这个测试,那么我会在下一个得到信号。

我知道这些信号通常来自访问您不应该访问的内存,但是我不确定这可能发生在哪里。

(请注意,复制构造函数和赋值运算符重载尚未实现。我认为这不会导致这种情况,但如果我错了请纠正我)

任何帮助将不胜感激!