问题标签 [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 回答
5795 浏览

c++ - 在 ubuntu 20.04 #include 上安装 Catch2

我正在尝试在 ubuntu 20.04 上安装Catch2 。

从这里使用指令。

这就是我所做的:

比它告诉我一切都好:输出链接

但是:当我尝试编译示例时://从这里

主文件

CMakeLists.txt

它输出这样的错误:catch2/catch.hpp:没有这样的文件或目录

提前致谢

错误

0 投票
1 回答
635 浏览

c++ - 如何使用 Catch2 和 CMake 添加单独的测试文件?

文档中,他们只编译一个test.cpp可能包含所有测试的文件。我想将我的个人测试与包含的文件分开#define CATCH_CONFIG_MAIN,就像这样

如果我有一个test.cpp包含#define CATCH_CONFIG_MAIN一个单独的测试文件的文件simple_test.cpp,我已经设法以simple_test.cpp这种方式生成一个包含测试的可执行文件:

但是,这是生成可执行文件的可接受方式吗?从不同的教程中,如果我有更多的测试,我应该能够制作一个测试源库并将它们链接test.cpp到生成可执行文件:

但是当我尝试这个时,我得到了一个 CMake Warning Test executable ... contains no tests!

总而言之,我应该制作一个测试库吗?如果是这样,我怎样才能让它包含我的测试。否则,将我的新 test.cpp 文件添加到add_executable函数中是否正确?

0 投票
0 回答
248 浏览

c++ - CMake find_package 用于非标准位置

我正在尝试创建一个自包含库,其依赖项是自包含的。所有安装都安装到 <repo_dir>/libs//build。要在 cmake 构建系统中查找依赖项,我使用 find_package。因为所有安装都在自定义位置,所以我指出我使用 HINTS 来提供帮助 -

我认识到 Catch2 可能不需要这个,因为它只是标题,但是我正在尝试了解 cmake 在做什么。上面的 CMakeLists.txt 打印出来

看起来还需要一个目标文件。我在 Catch2 存储库中找不到。我也在为愚蠢尝试相同的过程,但它对我也不起作用。在模块模式下使用以下 Boost 工作。为什么它有效?

有人可以帮助发现我的问题以及我应该如何使用

  1. 仅标头库
  2. 静态库二进制文件
  3. 自编译库

谁的资源在不寻常的地方?

0 投票
1 回答
975 浏览

c++ - 如何使用 CMake 和 Catch2 获得测试覆盖率

我正在尝试在用于测试lcovC++项目上打印覆盖率。Catch2我能够运行我的测试并获得结果。但是,我无法获得任何报道。这是显示的错误。

我当前的工具链是WSL. 我正在使用Conan依赖管理。该解决方案具有以下结构:

每个文件夹都有它的CMakeLists.txt文件并被标识为目标。我还使用这个 CMake 模块来注册覆盖目标。

我的根CMakeLists.txt看起来像这样:

为了获得我的报道,我正在使用以下命令(on build/)。

据我了解,它似乎缺少一些覆盖信息所需的文件,但我不知道如何制作它们。从我在网上查看的内容来看,我拥有所有必要的编译器标志。我看不出这里有什么问题/缺失。

0 投票
0 回答
153 浏览

c++ - 如何使 catch2 运行驻留在静态库中的测试?

我通常使用catch2的工作流程是拥有一个包含所有测试用例和测试“运行程序”的控制台应用程序。

例如:

file1.cpp, file2.cpp 包含测试:

单个文件 main.cpp 将包含运行器代码:

为了减少编译时间,我尝试将所有包含测试的文件(file1、file2 等)移动到单独的静态库项目(Visual Studio)中。

但是这样做之后,catch 找不到任何测试用例:

我尝试将运行器代码放在驻留在静态库中的函数中,但这没有帮助。

问题:

  • catch 究竟是如何找到它的测试用例的?
  • 为什么会失败?
  • 我该如何解决?
0 投票
0 回答
135 浏览

amazon-web-services - 在另一个 lambda 函数中调用 lambda 函数时捕获错误

我可以使用 aws-sdk invoke() 函数从另一个 lambda 函数调用 lambda 函数。我写了两个 lambda 函数。我调用的 lambda 函数返回 context.fail() 以防发生任何错误。我像这样调用 lambda 函数:

当我通过 API Gateway 调用 lambda 函数时, context.fail() 工作正常,我得到状态码 400,正如我在映射模板中声明的那样。但是当我直接调用 lambda 函数时,我无法在上面的代码中捕获错误并且它总是可以解决。如何在上面的代码中捕获错误?谢谢

0 投票
1 回答
193 浏览

c++ - Catch2 GENERATE 宏在内部是如何工作的?

最近我了解了GENERATECatch2 中的宏(来自此视频)。现在我很好奇它是如何在内部工作的。

天真地认为,对于带有生成器的测试用例k(通过生成器,我的意思是一个GENERATE调用站点),Catch2 只运行每个测试用例n1 * n2 * ... * nk时间,其中nii第 -th 生成器中元素的数量,每次指定不同的值组合从那些k发电机。事实上,这个幼稚的规范似乎适用于一个简单的测试用例:

正如预期的那样,输出是:

这表明测试用例运行了2 * 2 == 4多次。

但是,catch 似乎并没有天真地实现它,如下例所示:

在上述情况下,实际调用(不是调用点)GENERATE取决于choice. 如果逻辑实现得天真,人们会期望有 8 行输出(因为2 * 2 * 2 == 8):

请注意重复的行:即使未实际调用生成器,天真的置换仍然会置换生成器的值。例如,y = GENERATE(4, 5)仅在 时调用choice == 1,但是,即使在 时choice != 1,实现仍会置换值 4 和 5,即使未使用这些值。

但是,实际输出是:

没有重复的行。这让我怀疑 Catch 在内部使用堆栈来跟踪调用的生成器及其最近调用的顺序。每次测试用例完成一次迭代时,它会以相反的顺序遍历调用的生成器,并推进每个生成器的值。如果这种推进失败(即生成器内的值序列完成),则该生成器将重置为其初始状态(即准备好按顺序发出第一个值);否则(推进成功),遍历退出。

在伪代码中,它看起来像:

这完美地解释了前面的案例。但它并没有解释这个(相当模糊的)一个:

人们会期望它运行4 == 2 * 2时间,并且输出是:

x之前的更改yx = GENERATE(0, 1)最后一次调用的生成器)

然而,这不是 catch实际所做的,这是现实中发生的:

8行输出,也就是前四行重复了两次。

所以我的问题是,GENERATECatch2 究竟是如何实现的?我并不是特别在寻找详细的代码,而是一个可以解释我在前面的示例中看到的内容的高级描述。

0 投票
1 回答
523 浏览

c++ - 无法使用 catch2 CATCH_CONFIG_MAIN 编译文件

我已经开始学习如何使用 Catch2 来测试我的 C++ 代码,并且正在尝试设置一个简单的测试。

我的文件夹结构由三个文件组成,它们都在同一个文件夹中:

我所写的test.cpp是:

当我尝试编译时,test.cpp我收到以下错误,我认为这表明没有main()找到函数(?):

当我添加一个标称main()函数时,该文件编译成功,但据我所知,它#define CATCH_CONFIG_MAIN应该为您创建main()函数,所以显然有些东西不起作用。

任何人都可以对此有所了解吗?

0 投票
1 回答
79 浏览

c++ - 为什么“==”在这里不可接受?

我正在编写单元测试并比较两个对象以确保它们相同但出现错误no operator "==" matches these operands -- operand types are: Item == Item

这是我的代码,有问题的行注释:

Item并且container是在别处定义的类。

根据要求,这是Item该类的定义:

就是这样——在我的队友编写正确的代码之前,它是一个占位符类。

容器背后的代码目前也很有限,但我认为相关部分如下:

我还没有定义方法,Containers因为我首先编写测试代码。

0 投票
1 回答
191 浏览

c++ - Catch2 未定义对 Catch::StringMaker 的引用

我正在使用实际devel分支中的 Catch2,尝试比较两个时出现链接器错误vector<string_view>

该问题可以重现如下:

我的CMakeLists.txt

尝试构建时出现以下链接器错误:

我究竟做错了什么?我错过了一些包括吗?