问题标签 [catch-unit-test]

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 回答
604 浏览

c++ - CMake:如何为每个测试重用相同的 test_main.cpp

我想在一个 monorepo 中使用测试框架Catch2,其中将有许多组件,每个组件都有自己的测试。我想使用 CMake 来定义所有构建目标。

Catch2提供了一种简单的方法来生成一个通用main()函数,该函数将运行链接到应用程序的所有测试。源文件(我称之为test_main.cpp)就是这两行:

我想test_main.cpp在我的源代码树中只有一个副本,并从每个包含测试的组件目录中引用它(最终将有数百个目录)。

如果我复制了 CMake,我可以看到如何设置 CMake 以使其工作,test_main.cpp以便在每个带有测试的目录中都存在冗余副本,但我还没有弄清楚如何只有一个副本。有没有我忽略的简单技巧?

0 投票
2 回答
12967 浏览

c++ - 如何将 CMake 与 Catch2 一起使用?

Catch2 的示例中,我尝试使用cmake我的项目结构运行此示例:

fact.cpp

fact.hpp

test_fact.cpp

我已经尝试了几种方法来构建这个项目,cmake但都失败了。有时我得到一个错误:

有时我得到:

当我跑步时make

我应该有什么,factorial/CMakeLists.txt如果我想有我的执行文件?factorial/src/CMakeLists.txtfactorial/test/CMakeLists.txtfactorial/bin

附加:这是我的 CMakeLists.txts(我认为它们完全错误)。

factorial/CMakeLists.txt

factorial/src/CMakeLists.txt

factorial/test/CMakeLists.txt

0 投票
1 回答
88 浏览

c++ - 为什么我们需要用 Catch 单独编译一个主测试文件?

我编写了以下 Makefile(按预期工作):

在我的test_main.cpp文件中,我只有以下几行:

我尝试查看在我的 Makefile 中是否可以替换测试规则,如下所示:

但是,我得到一个"_main", referenced from: implicit entry/start for main executable错误。对我来说,它似乎应该可以正常工作,只是test_main.cpp作为我实际测试的依赖项。这个主文件需要编译为自己的.o文件有什么原因吗?

0 投票
1 回答
345 浏览

codeblocks - 在代码块 C++ 中编译我的代码时遇到问题

我正在尝试为数据结构类做作业。问题是 1) 使用定义的 UNIT_TEST 进行编译,然后使用 -d yes 运行以查看所需时间(以秒为单位)。在提交框中报告该时间以及您在测试选择排序时发现的时间。哪个更快?

我无法理解,我做错了什么。我收到此错误:

到目前为止,这是我的代码:

0 投票
2 回答
80 浏览

c++ - 无法编译布尔连接

我的 Catch Testframework 中有以下简单的表达式。理想情况下,如果测试失败,测试应该发出警告。

不幸的是,Catch 无法编译以下代码片段:

Visual Studio 2015 发出以下错误:

我会期待类似以下的内容:

这是否可能与 Catch 或我必须使用额外的括号:

0 投票
2 回答
879 浏览

c++ - 获取将在 Catch 中运行的部分

Catch2 单元测试框架允许您拥有测试部分。从文档:

有没有办法预先确定特定运行的 s列表testCaseStarting()是什么?SECTION例如,给定:

我想要一些方法来获得{b}第一次,{c, d}第二次和{c, e}第三次。有没有办法做到这一点?

0 投票
1 回答
4185 浏览

c++ - Catch2 - 未定义的引用

我正在使用 Catch2 作为库测试我的项目。我遵循了 Catch 文档中的每一步,但是当我运行测试时,我收到以下错误:

CMakeFiles/tests.dir/tests/IntegerIntervalTest.cpp.o: in function "____C_A_T_C_H____T_E_S_T____0()": /home/davide/cpp-project/tests/IntegerIntervalTest.cpp:8: undefined reference to "domain::IntegerAbstractInterval<int, int>::IntegerAbstractInterval(int, int)"

并且对于测试“类”中的每个方法调用都会重复此错误。

CMakeLists:

这是测试文件IntegerIntervalTest.cpp

0 投票
1 回答
63 浏览

c++ - xcode 从源代码中删除奇怪的控制字符

**更新

我试图了解 XCode 如何/为什么似乎在我的 C++ 源代码中添加了一个奇怪的字符,而实际上它正在删除它我正在创建一个简单的类并在学习 C++ 课程时使用 CATCH2 测试框架。我有一个将数字转换为单词的 numwords 类。

它失败了:

然后我通过仔细地将预期值复制/粘贴回我的测试中发现确实存在一些不可见的差异。就在那时,它开始神奇地过去了。我查看了我的 git diff 并看到了这个:

这个奇怪的控制字符只显示在差异中,并且只有在我尝试在失败后从差异或控制台复制/粘贴文本之后。添加特殊字符会导致测试通过。如果我在键盘上手动键入值“四十七”,特殊字符就会消失并且它FAILS。世界上到底发生了什么?这个 ^P 隐藏字符是什么?

numword.cpp 的来源如下:

我刚刚做了一些研究,发现 ^P 是一个数据链接转义码 (DLE)。我仍然不确定如何键入它。我的 numword.cpp 逻辑如何添加它?我哪里错了?

0 投票
3 回答
824 浏览

c++ - 如何在 Bazel 项目中设置 Catch2

我已经开始了一个简单的 C++ 项目,它使用 Bazel 作为构建系统,并希望将 Catch2 添加到它,作为测试框架。

这是我的项目到目前为止的样子:

BUILD 就在哪里

我希望能够为每个创建测试cc_library,在这种情况下为Money. 我尝试设置它,但对 Catch2 main 感到困惑。任何关于如何做到最好的建议都值得赞赏!

0 投票
1 回答
5205 浏览

c++ - 编译错误“错误:预期的';' 在声明列表末尾”使用 C++ 中的 Catch 测试框架

我正在尝试通过在其中实现一些简单的算法来学习 C++。为了测试这些算法,我想使用Catch2。这是我为二进制搜索提出的程序:

我将catch.hpp单个头文件复制到同一目录中。问题是当我尝试g++在我的 Mac 上使用命令编译它时,我收到以下错误:

简而言之,Catch2 源代码本身正在生成几个相同的语法错误。我怀疑这可能与编写的 C++ Catch 的“版本”与我的编译器期望的不同有关,但我无法通过 Google 搜索此错误快速确定这是否是问题。

以下是我的g++编译器的详细信息:

知道是什么导致了这个错误,以及如何让 Catch2 单元测试工作吗?