问题标签 [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 投票
0 回答
1072 浏览

c++ - Ctest 没有找到带有子目录的 catch2 测试

我似乎没有让我的 CTest 项目识别我的 Catch2 测试。测试项目本身构建良好,我设法使用它创建的可执行文件运行测试。但是在运行时

我不断得到的输出是:

我的设置如下:

文件夹结构:

   └── CMakeLists.txt

我从构建文件夹构建

ctest 中的 CMakeLists.txt

主 CMakeLists.txt

我已经查看了这里的食谱、cmake 食谱、modern-cmake、catch2 github 页面,但我似乎错过了一些明显的东西,因为由于某种原因,测试没有被选中。我无法找到带有 add_subdirectory 的示例,因此可能会导致不同的设置。

如果我跑

所有测试运行良好。所以可执行文件本身很好。

0 投票
1 回答
40 浏览

automake - 配置 autotools 以使用相同的目标文件来构建两个程序

我有一个使用自动工具构建的 C++ 项目,以及用于单元测试的Catch2 。Catch2 的细节可能无关紧要:它只是我必须构建和运行的另一个程序。

我已经这样Makefile.am设置(简化):

这主要工作,除了它编译所有东西两次lpsdr-applicationcontroller.ocatch2-applicationcontroller.ocommon_sources.

当然,这会使构建时间加倍。我更喜欢将两者链接catch2lpsdr使用相同的目标文件:构建速度会更快,并确保我正在测试与正在运行的完全相同的编译代码。

有没有办法解决这种行为?

0 投票
1 回答
233 浏览

c++ - Catch2 要求异常等于某事

我正在寻找这段代码的替代品,因为它在整个测试段中重复出现,我检查它是否返回正确的错误消息(来自枚举)。

我认为 Catch2 中应该有一个内置的。

0 投票
1 回答
226 浏览

c++ - 使用 catch2 进行结构和测试的问题

所以我在 point2D.h 头文件中有以下函数:

然后在 point2D.cpp 文件中我使用这个函数如下:

在 cpp 文件的末尾还包括以下内容:

这里 VectorXY 是在另一个头文件中定义的结构。因此,我在 point2D.h 和 point2D.cpp 文件中都包含了这个头文件。

这里 point_vector 来自不同的点类。

为了测试这个功能,我用 catch2 和 BDD 风格编写了以下测试。

但是当我编译这个时,我得到以下错误:

错误:“struct ASSplinePath::VectorXY”没有名为“create_x_y_vectors”的成员 xy_vec.create_x_y_vectors(points);

错误:没有匹配函数调用'Catch::Detail::Approx::Approx(double, double, double)' REQUIRE(xy_vec.x == Approx(1.0, -3.0, 5.0));

我应该补充一点,当我注释掉这个测试时,一切都编译得很好。因此,我认为这里有问题。因此,我不太确定这个错误意味着什么。我将衷心感谢您的帮助。谢谢你。

0 投票
0 回答
292 浏览

c++ - VS Code Test Explorer Catch2 扩展能否在源更改时自动使测试过时

我在项目中使用带有python扩展的VS Code 测试资源管理器。太棒了。如果我更改任何源文件,测试资源管理器中的相关测试将突出显示为过期,所以我知道我必须再次运行它们以检查一切是否正常。

我正在尝试对C/C++项目和 Test Explorer Catch2 扩展做同样的事情。我有一个简单的介子项目文件来构建我的测试可执行文件。

它工作得很好,因为我的测试被发现并且我可以运行它们,但是如果我更改源文件,测试不会显示为过期以表明它们需要重新运行

我知道这是介子(或 VS Code 所理解的构建系统)的依赖问题。

是否有测试资源管理器(或 VS 代码)方法来确定哪些 exe 已过时并需要构建(测试和一般构建)?

0 投票
0 回答
162 浏览

c++ - 从线程调用的用于测试无限循环的 C++ 模式

我如何用 Catch2 测试从线程调用的无限循环。例如:

在这种情况下如何测试 foo 类、bar 和 never_loop 方法?这种情况下是否存在任何测试模式?

谢谢!

0 投票
3 回答
265 浏览

qt - 如何使用带有 qt 和 trompeloeil 的 catch2 创建用于创建测试可执行文件的模板?

我有一个项目(带有main.cpp一些标题。是的,它是本博客中描述的 Catch2 测试项目)。它编译并运行。

我的问题是:除非我添加更多源文件(我的测试用例),否则这个项目没有任何用处。这些源文件使用项目中的一个标头并引入其他一些依赖项(我要测试的库)。

简单的解决方案是复制这个项目,添加所需的文件,我们就完成了。

有没有更好的办法?目前使用 qmake 我在catch.pri文件中定义了项目。通过将其包含在项目中,我拥有了 qt 和 catch2 设置的所有内容,并且只需通过修改SOURCES-Variable 和要测试的代码的依赖项来定义带有测试用例的文件。

将此映射到CMake让我提出问题:

第一:当我包含这样一行时:

我可以SOURCES在后面的行中定义吗?

第二个也是更重要的:这样做是个好主意吗?

0 投票
1 回答
436 浏览

c++ - MPI:检查是否有进程被终止

我正在Catch2为一些使用 MPI 的代码编写单元测试。失败的测试Catch2基本上是带有有用错误消息的失败断言。现在,在某些情况下,mpirun似乎无法检测到测试何时仅在一个进程上失败。然后可能会发生死锁。

是否有任何或多或少优雅的方法来检查代码中的特定点,是否所有进程都还活着?如果不是,则所有进程都将终止。

0 投票
0 回答
130 浏览

c++ - GTest 有类似 Catch2 GENERATE 的东西吗?

Catch2 GENERATE 看起来很不错,我想在 GTest 中使用类似的东西。

我知道 GTest 中的参数化测试,但我不喜欢从测试主体和值列表中拆分出来,以及对 GetParam() 的丑陋调用。

此外,我喜欢 Catch2 中 GENERATOR 的范围、拍摄、随机功能。

对于那些不熟悉 GENERATE 的人:这是一种神奇的迭代(针对列出的每个值运行测试,而无需用户显式循环这些值)。如果它们是嵌套的,则它们充当“笛卡尔积”,即这将运行此测试 10 次(“one” 2x2 次,“two” 2x3 次)。

range、take、random 是生成值的助手(文档)。

0 投票
1 回答
85 浏览

c++ - Catch2 看不到我的实现文件

我的项目树是:

因此,当我在 test.cpp 中包含 foo.h 并尝试调用在 foo.h 中声明并在 foo.cpp 中实现的函数时,Catch 说一切都失败了,没有任何实现。CMAKE (catch2)

CMAKE(项目)