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

c++ - DocTest 和 Catch 2 都没有运行单元测试

我正在使用 Visual Studio 2019 (v. 16.0.4) 和 Resharper (v. 2019.1.1) 开始一个新的 win32 C++ 项目,并且无法让 Catch2 或 Doctest 单元测试框架运行测试。我更喜欢 Doctest 并首先使用它,当它不起作用时,我尝试了 Catch2 并得到了相同的结果。两个框架都找到了测试,但给出了“不确定的测试未运行”的状态。Catch2 警告状态:“2019.05.19 08:47:46.447 WARN Element CatchTest Test 在运行完成后仍处于待处理状态。”。以下所有代码均适用于 Catch2:

引擎.h

引擎.cpp

DocTest.cpp(使用Catch2代码,DocTest代码被注释掉)

我发现在有关 Visual Studio 和 Resharper 早期版本的对话中存在这样的问题,但我使用的是最新版本,但仍然存在问题。

在 Resharper 选项中,我在“C++ 测试”下选择了“启用 Catch 支持”,并在“MsTest”下选择了“启用 MSTest 支持”。我为单元测试和所有项目配置设置都选择了 x64 架构。

对此的任何帮助表示赞赏。谢谢你。

0 投票
2 回答
2828 浏览

c++ - 使用 CMake 和 Visual Studio 的 Catch2

我正在尝试为我构建的库设置Catch2测试框架。我正在使用 CMake 和 Visual Studio 2017。

我的项目结构是:

SUT.hSUT.cpp并且SUTTest.cpp只是测试基于示例定义的阶乘函数。

我在库中的 CMakeLists.txt 文件是

SUTTest.cpp文件是:

“可执行项目”只是使用库(它是实际的应用程序)。该CMakeLists.txt项目中的 将库动态链接到它。

当我在 Visual Studio 中构建此解决方案时,构建工作正常。

但是,尽管断言Factorial(0) == 0. 此外,Visual Studio 没有在测试文件夹中发现测试。我想要实现的是:

  1. 当我在 Visual Studio 中单击 Build 时,测试将作为构建的一部分运行。

  2. (可选)能够让 Visual Studio 发现测试。

编辑:

0 投票
1 回答
579 浏览

c++ - Catch2 强制我在我的异常中添加对 std::string 的强制转换,这会产生其他问题吗?

我正在使用Catch2编写单元测试。

我想做的一件事是确保我捕捉到了正确的异常。在许多情况下我都会抛出相同的异常,因此仅知道我正在捕获 anstd::logic_error并不能证明确实捕获了异常的特定实例。

Catch2 为此提供了REQUIRE_THROWS_MATCHES()宏。

这是我如何将它与Equals匹配器一起使用的示例:

除非我的异常中有一个强制转换运算符,否则它不会编译。在这种情况下,这很容易,因为我有自己的例外。但我想知道为什么 Catch2 的作者想到使用强制转换std::string而不是使用what()函数。

这是我当前的基类异常定义

这是operator std::string () const功能:

是否有另一种方法可以满足 Catch2 要求并允许将异常转换为 anstd::string而无需创建强制转换运算符?我只是不喜欢演员阵容,这可能会导致其他问题。

注意:我试图使演员表明确,而 Catch2 也不喜欢它。它只是将异常传递给需要std::string.

0 投票
0 回答
558 浏览

c++ - 如何从 Catch2 测试用例中访问自定义命令行选项?

我使用自定义主文件添加了我自己的命令行选项:

https://github.com/catchorg/Catch2/blob/master/docs/own-main.md#adding-your-own-command-line-options

现在我想height在测试用例中使用命令行选项。最好的方法是什么?

0 投票
1 回答
1082 浏览

c++ - 在 Catch2 中检查近似零的规范方法是什么?

与 Catch2 中的近似零进行比较的规范方法是什么?

我发现这种方式的容差为 1e-12,但尚不清楚这是最好的方式:

我不是在问如何比较一般的浮点数。我知道这不是一个简单的问题。我在问如何在预先知道一定容差的情况下使用 Catch2。

以下内容不起作用,因为相对(epsilon)误差在零附近表现不佳:


其他可能的(不太好)(替代品似乎是

0 投票
1 回答
358 浏览

qt - 如何将 Catch2 与 QT 事件循环集成?

QT 的某些部分依赖于事件循环的启动和运行(或至少生成警告)。如何将 Catch2 测试与 QT 事件循环集成?

0 投票
1 回答
32 浏览

c++ - Problem in testing my function with Catch2Farmework

I have written a function FindTopEnd which takes some arguments as shown. This function moves from bottom to up in a straight vertical line and checks for black pixel. If black pixel is found then it checks for a black pixel 3 pixels above that point. If a black pixel is found there also then it stores that initial pixel value in the variables and also stores the length of the line. Else it continues on the image.On running the source code, it works fine but in testing, it is stopping in between without any error and giving wrong outputs.

I have tried it on different images and debugged the code step by step for output but everytime the if() conditions are satisfied on 150 pixels and the for loop is breaked giving wrong output.

NOTE: In test case 280 pixel is given as input just for testing purpose in the blank space.

I expect the output - LineHead_x = 280, LineHead_y = 0, LineLength = 300. Actual results - LineHead_x = 280, LineHead_y = 149, LineLength = 150.

This is the image of the output of the source code. This proves that the lines are being created as the way they are needed as to be tested. Image of output of source code - https://ibb.co/XVCCXFY

This is the image of the output from the test case where the line is stopped at 150 pixels Image of output of test case - https://ibb.co/qpD1KwS

0 投票
0 回答
267 浏览

c++ - 信号中的冗余命名空间声明以使用 QSignalSpy

我正在尝试QTest结合使用CatchQSignalSpy测试我的应用程序。我不得不说,我使用的是 Qt 5.10.0,这可能很重要。

最近我偶然发现了一种奇怪的行为,我无法真正解释。

主文件

测试用例.h

测试对象.h

如果我将运行发布的代码,我将获得以下输出,这对我来说很好。

但是,如果我将行更改void objectChanged(const nameSpace::MyObject&);void objectChanged(const MyObject&);我获得以下错误输出:

所以有必要在信号定义中包含看似多余的命名空间。搜索并找到这个错误花了我半天时间,现在我也想了解这种行为的可能原因。这是故意的还是 Qt Bug?如果是故意的,那么 Qt 文档中的这个位置在哪里。

这有点类似于为什么必须写

代替

请参阅文档:https ://doc.qt.io/qt-5/qmetatype.html#Q_DECLARE_METATYPE 。

0 投票
1 回答
790 浏览

c++ - 无法使用 cmake 编译简单的项目结构(使用 catch2 库)

我有一个非常简单的项目结构,我无法使用 CMake 进行编译。我试图阅读有关 CMake 或教程的文档,但我无法让它工作。

有一个类似的问题,但即使尝试了答案所暗示的内容,我也无法让它发挥作用。

你可以在这里看到我的完整代码

但相关的 CMakeLists 是:

根级别:

源代码:

测试:

但基本上我有一个 test_factorial.cpp 文件,其中包含标头 factorial.hpp (在包含目录中),因此应该知道 Factorial(int) 函数的存在,但它说它未定义。

我尝试的是:

我希望make工作,而不是我得到:

0 投票
0 回答
389 浏览

c++ - 如何在运行时在 CTest 中传递命令行参数?

我想在通过竹子或詹金斯运行时通过 ctest 将参数传递给我们的 Catch2 测试,以便它们产生 junit 测试结果。所以我想做类似的事情:

这会将这些转发给我的测试:

这样,当我运行make tests它时,它只会正常运行测试,将结果漂亮地打印到控制台。

我知道可以在 add_test() 命令中添加 args,但我正在寻找更动态的东西。

我希望在现代 CMake 中有一种方法可以做到这一点。