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

visual-c++ - 如何使用 Catch2 从 wxWidgets 应用程序运行

在最近了解了 Catch2 之后,我非常想用它来测试一个 wxWidgets 项目的一些功能。我见过的所有简单示例基本上都是作为控制台应用程序运行的。我见过的其他人用于实例化和测试一个完整的类。有一些示例展示了如何设置以允许用户创建自己的 main() 函数,但我还没有找到一个示例来展示如何将这些作品合并到我的应用程序中。

我认为我需要找到方法,以便我可以传递一个指向主框架类的指针,这将允许我测试成员函数。

如果我也可以从菜单或工具栏开始测试,并希望捕获输出以记录或显示在 GUI 中,那就更好了。

在这个阶段,我根本没有工作代码。虽然我查看了 3.1.3 的 wxWidgets 发行版中的测试并发现了 Catch2 的一些用途,但我找不到任何东西来涵盖我认为我需要的东西。

在 Win 10 下使用 wxWidgets 3.1.3 运行并使用 MSVC 2019

0 投票
1 回答
192 浏览

c++ - 在运行时检测 Catch2 中的特定标签匹配

我的Catch2项目中有集成测试,这些测试依赖于设置的一些昂贵的全局状态。我只想在测试运行器实际测试依赖它的系统时初始化该全局状态。

我所看到的似乎有效,但它有点可怕......这取决于 Catch 配置中相当多的实现细节。

这是我的主要内容:

然后我的测试文件就是:

请注意,由于有多个部分(在我的实际项目中,还有多个测试用例)依赖于全局设置,所以我不能只将初始化移动到TEST_CASE.

有没有更好的办法?

0 投票
1 回答
373 浏览

c++ - ctest 报告退出状态为 1 的测试成功

我有一个带有单元测试的项目,当我运行 ctest(macos 上的 cmake 版本 3.18.2)时,所有测试都报告成功。但是,如果我自己运行其中一项测试,它的退出状态为 1。据我所知,这不应该发生,那么是什么原因造成的,我该如何解决?

这个问题是一个粗心的小错误,但为了其他遇到这个问题的人的利益,我提供了一个答案,其余问题可以跳过。

不幸的是,我无法用较小的最小工作示例重现此行为。我会尽量提供尽可能多的相关信息,如果我遗漏了什么,请告诉我。下面是单元测试的代码:

当我取消注释注释部分时,退出代码更改为 2 并且 ctest 仍然报告成功。

这是我运行 ctest 时发生的情况(有和没有注释部分):

如果我单独运行测试并检查退出状态(注释掉的东西),这是我得到的:

当我包含注释部分时,唯一改变的是两个测试失败并且退出状态是 2 而不是 1。

这里有--verbose标志:

我没有更改 ctest 配置(如此处所建议。CMakeLists.txt 看起来像这样:

0 投票
2 回答
397 浏览

c++ - 在 C++ 中模拟没有依赖注入的函数内部创建的外部依赖对象

我正在尝试用 C++ 编写单元测试,并且面临使用 Fakeit 为外部依赖项创建模拟对象的问题。所以我们有一个类似于下面的类:

现在假设我想为test_method()class编写一个单元测试A。当我们打电话时,obj.sendInt()我想模拟它并返回一个不同的值。我尝试使用 fakeit 但无法找到解决方案。

我知道如果我们尝试B通过构造函数或 setter 方法进行依赖注入,这将得到解决,但我不想这样做,因为它需要对A.

对于 Java 中的类似场景,我会使用 PowerMockito 并使用PowerMockito.whenNew

0 投票
1 回答
571 浏览

c++ - Catch2 - 为不同的测试文件使用不同的模拟数据填充单例

我在我的 C++ 项目中使用 Catch2 进行单元测试。我有一个单例类,它正在不同的测试文件中使用。例如,一个文件可能正在测试单例本身,而另一个文件可能正在测试单例与另一个组件之间的交互。因此,我想知道是否有一种方法可以为每个测试文件使用不同的模拟数据集填充单例类。

据我所知,我似乎有两种方法可以走。

  1. 使用测试用例和部分

测试A.cpp

测试B.cpp

然而,这意味着设置函数将在每个测试文件中运行两次,这不是必需的,我希望避免这种情况。我也不想将我的所有测试归为一个 SECTION/TEST_CASE。

  1. 用于Listeners

我知道我可以创建和注册自己的Listener类并覆盖testCaseStartingandtestCaseEnded方法,这似乎适用于所有 TEST_CASE,但我希望为 TestA 和 TestB 设置不同的设置。

因此,有没有更好的方法可以在每个测试文件中以不同方式设置我的单例类,以便类似于在每个测试文件的开头和结尾运行设置和拆卸功能?

0 投票
2 回答
2636 浏览

c++ - 如何比较catch2中的浮点数

我正在使用 Catch v2.13.1

比较浮点值的正确方法是什么。我认为下面会失败,但都通过了。

然而,这如预期的那样失败

我不明白为什么前两个语句不起作用

0 投票
3 回答
1104 浏览

c++ - 使用 Catch2 时未解决的外部符号错误

我正在尝试在 Visual Studio 中进行 Catch2 单元测试。我创建了一个小测试项目来练习。当我尝试编译这个测试项目时,我得到一个链接器错误。我现在正在尝试诊断此链接器错误,但Catch2.hpp头文件包含数千行代码。我希望更熟悉 Catch2 或单元测试的人可以诊断出问题所在。

我将描述我创建这个项目的过程。我在新解决方案中创建了一个新项目。我有 4 个文件,都在同一个目录中,如下所示。

我要测试的课程:

考试:

运行测试的主要函数:

Catch2 测试框架:

当我尝试使用本地 Windows 调试器按钮在 Visual Studio 中编译此代码时,我收到一堆未解决的外部符号链接器错误。我相信我在某处读到 Catch2 是“部分编译的”。这可能与它有关,但我不知道。遵循本指南(StackOverflow:Visual Studio 中使用 Catch2 进行单元测试的最佳实践)对我有用,但我试图理解为什么上面的小示例没有成功链接。

为了完整起见,我在下面包含了链接器错误,尽管我认为它们可能不是问题所必需的。

是什么导致了这些错误?如何catch.hpp在与源文件保存在同一个项目中的同时修复这些错误?

0 投票
1 回答
128 浏览

c++ - 控制 Boost.Test 源位置格式的输出

Catch2Boost.Test为编写单元测试提供了类似的功能。对于某个项目,我必须使用 Boost.Test 而不是 Catch2。我遇到的问题是两者都使用不同的格式输出。

例如,Catch2 会说 the was a fail in

test.cpp:9

(见下面的例子)。但是 Boost.Test 会说

test.cpp(9): error in ....

这种格式不允许我的编辑器将输出识别为源位置。

有没有办法让 Boost.Test 输出源位置file.ext:lineno而不是file.ext(lineno)

这是 Catch2 的典型输出

这是 Boost.Test 的典型输出

0 投票
2 回答
519 浏览

c++ - testthat (& Catch) 抱怨 R CMD 检查缺少 xml2 库

我正在使用 testthat 来测试我的 R 包(https://github.com/beerda/hexmatrix)。最近,我开始了 C++ 测试:我已经执行testthat::use_catch()了,它应该设置包以使用 C++ Catch 进行单元测试,然后我编写了一些测试。如果由 执行,测试将正确运行devtools::test()。但是,如果我尝试运行R CMD checkor devtools::check(),我会收到以下错误消息:

xml2 包已安装,rlang::check_installed("xml2") 返回 TRUE。

不确定它是否以某种方式连接:当我尝试手动执行命令run_cpp_tests("hexmatrix")时,出现以下错误:

请问有人知道出了什么问题吗?提前致谢。

0 投票
1 回答
92 浏览

c++ - 添加结构时 catch2 抛出和错误

这是我项目的根源。我认为我缺少一个基本概念,因为当我将find()函数包装在结构中时会发生错误。

CMakeLists.txt

bst.cpp

bst.hpp

bst-test.cpp

这是尝试编译时的错误。