问题标签 [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.
visual-studio - Catch2 - 无法重建长测试名称
在 Visual Studio 2017 中使用Catch2 测试适配器时,我的一些包含长场景名称的测试出现错误。我不知道确切的长度阈值,但它似乎发生在场景的字符串长度约为 80 个字符或更多时。有没有办法解决这个问题,而不是只使用较短的场景值?
示例场景,
Visual Studio 首次加载并扫描测试时的示例错误,
visual-studio - 使用 VisualStudio 测试适配器跳过 Catch2 测试
使用 Visual Studio Catch2 测试适配器时,我通常跳过的 Catch2 测试不会跳过。如何让他们在使用测试适配器时跳过
例如,我的测试通常使用"[.]"
c++ - 如何在 CMake 中预先构建一个库
我一直在学习 CMake,并且在 Catch2 库中遇到了持续的构建问题。
我使用 Qt 作为我的 IDE,并通过 Qt 维护工具下载了 Qt6 和 MinGW 8。
我的问题似乎是在编译过程中,我的 test/main.cpp(包括 Catch2)膨胀到编译器出错的地步。
这些问题只发生在调试版本中,所以我相信重模板的组合以及调试符号正在达到一些 MinGW 编译器阈值......
我正在尝试类似的东西
(实际上似乎不是有效的CMake,也尝试不使用'-',无论如何,这并不能解决问题,只是隐藏它......)
但在我看来,最好的选择是让库在发布时预编译(我不需要调试 Catch2 内部,如果我正在调试,那是因为我正在调查一个损坏的测试,我应该不需要 lib 内部的肮脏细节来做到这一点吗?)
我在这里有一个最小的工作示例https://github.com/SebastianTroy/CMakeTestbed。
这里感兴趣的主要文件是:
- catch2.cmake (来自https://github.com/catchorg/Catch2/blob/v2.x/docs/cmake-integration.md#cmake-target)
- 测试/CMakeLists.txt(包括 Catch2)
- test/main.cpp(编译失败的单元)
我真的很感谢强制 CMake 使用比目标更高的优化标志预编译库的一些帮助(以完全防止问题)我会接受帮助告诉编译器忽略过大的文件(只是回避问题)
c++ - 如何将 TEMPLATE_TEST_CASE 与类型对一起使用?
我正在尝试将catch2 TEMPLATE_TEST_CASE用于成对的类型,即我不需要为每个测试模板化一个类型,而是需要使用一对相关的类型。我以为我可以std::variant
用来存储这些对,但编译失败:error: expected primary-expression before ‘)’ token. auto outtype = std::get<0>(TestType);
。
对于此错误或此问题的替代解决方案,我将不胜感激。这是代码片段:
c++ - C++11 和 C++14 之间的共享库问题
我不得不在我的项目中从 C++11 切换到 C++14 以使用为 C++14 编写的 Catch 测试框架(它不会用更少的东西编译)。一切都编译得很好。但是,在运行程序时,以下函数会导致一系列错误,这些错误似乎与 C++11 和 C++14 共享标准库文件之间的不匹配有关:
gdb 中的错误跟踪显示:
有谁知道如何解决这个问题?
c++ - Catch2:将类移动到命名空间后,INFO 无法识别重载流运算符
在我的代码中,我为 ByteArray 类重载了流运算符(它只是一个字节向量)。
和一个test.cpp
使用这个类的使用 Catch2
除非我引入了命名空间,否则这很好用
现在编译器抱怨
但是,如果我使用frame
with std::cout
,这很好用
所以我认为,编译器可以正确解析运算符。我还尝试更改包含文件的顺序并进行干净的重建 - 没有成功。
有任何想法吗?谢谢
c++ - Catch2 链接器错误
我已将Catch2
作为子模块添加到我的项目中,并Catch2/include/catch.hpp
使用以下代码包含标题:
测试main.cpp:
但我得到一个链接器错误:
我究竟做错了什么?我认为 Catch2 应该在其标题中是自包含的,并且不需要任何.cpp
文件来提供其符号?
c++ - CMake 错误:在构建 docker 映像时,源目录“/”似乎不包含 CMakeLists.txt
我目前正在尝试在 Docker Image 上安装 Catch2,用于我需要安装的项目。这是我目前拥有的 Dockerfile,
我知道我本可以更有效地完成很多事情,但我是 Docker 新手,所以RUN
慷慨地使用了这个命令。但现在我得到了错误,
在此之后有安装 Catch2 的步骤,但它恰好在此时停止。在任何虚拟机 (VirtualBox) 上使用这些确切的命令 (cmake) 安装 Catch2 运行良好,但在 Docker 上却不行。有什么我做错了。如果是这样,我该如何解决。
c++ - 如何在 Unix Bash 中运行/执行像“catch2”这样的单元测试框架?
我正在尝试学习使用 makefile 进行测试。我在网上搜索了一个框架。很多人都在谈论“catch2”,所以我下载了它。我在 git 中阅读了教程,并在许多其他网页中进行了搜索。我写了这个:(mytests
名称中没有任何后缀)来检查myprogram.cpp
.
有很多关于如何编写它以及如何添加功能和专业化或如何在选择要运行的测试和其他内容时运行它的文章......
但我找不到明确解释如何运行它的地方。我是初学者。我知道我可以在我的程序中运行一个测试,它将一个文件作为输入,就像这样: ./myprogram test.in1
。那么,我需要输入什么才能使用这个测试框架?
c++ - 使用 CMake 构建应用程序时,Catch2 测试不起作用
我正在尝试使用 Catch2 测试来测试我的程序并使用 CMake 构建应用程序。当未实施 Catch2 测试时,该程序可以运行并且应用程序将被构建。一旦我实现了 Catch2 测试,应用程序将不再构建。我包含#define CONFIG_CATCH_MAIN
并#include "catch.hpp"
进入 main.cpp。
但是当我尝试构建包含测试的应用程序时,我总是会得到这样的结果:
CMakeFiles\intent_recognition.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x43d): 未定义引用Catch::StringRef::StringRef(char const*)' CMakeFiles\intent_recognition.dir/objects.a(main.cpp.obj):main.cpp:(.text+0x4b9): undefined reference to
Catch::AssertionHandler::AssertionHandler(Catch::StringRef const&, Catch::SourceLineInfo const& , Catch::StringRef, Catch::ResultDisposition::Flags)'
我不知道发生了什么...
我的 main.cpp 文件如下所示:
我的 CMakeLists.txt 看起来像这样: