问题标签 [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.
c++ - CMake:如何为每个测试重用相同的 test_main.cpp
我想在一个 monorepo 中使用测试框架Catch2,其中将有许多组件,每个组件都有自己的测试。我想使用 CMake 来定义所有构建目标。
Catch2提供了一种简单的方法来生成一个通用main()
函数,该函数将运行链接到应用程序的所有测试。源文件(我称之为test_main.cpp
)就是这两行:
我想test_main.cpp
在我的源代码树中只有一个副本,并从每个包含测试的组件目录中引用它(最终将有数百个目录)。
如果我复制了 CMake,我可以看到如何设置 CMake 以使其工作,test_main.cpp
以便在每个带有测试的目录中都存在冗余副本,但我还没有弄清楚如何只有一个副本。有没有我忽略的简单技巧?
c++ - 如何将 CMake 与 Catch2 一起使用?
从Catch2 的示例中,我尝试使用cmake
我的项目结构运行此示例:
fact.cpp
:
fact.hpp
:
test_fact.cpp
:
我已经尝试了几种方法来构建这个项目,cmake
但都失败了。有时我得到一个错误:
有时我得到:
当我跑步时make
。
我应该有什么,factorial/CMakeLists.txt
如果我想有我的执行文件?factorial/src/CMakeLists.txt
factorial/test/CMakeLists.txt
factorial/bin
附加:这是我的 CMakeLists.txts(我认为它们完全错误)。
factorial/CMakeLists.txt
:
factorial/src/CMakeLists.txt
:
factorial/test/CMakeLists.txt
:
c++ - 为什么我们需要用 Catch 单独编译一个主测试文件?
我编写了以下 Makefile(按预期工作):
在我的test_main.cpp
文件中,我只有以下几行:
我尝试查看在我的 Makefile 中是否可以替换测试规则,如下所示:
但是,我得到一个"_main", referenced from:
implicit entry/start for main executable
错误。对我来说,它似乎应该可以正常工作,只是test_main.cpp
作为我实际测试的依赖项。这个主文件需要编译为自己的.o
文件有什么原因吗?
codeblocks - 在代码块 C++ 中编译我的代码时遇到问题
我正在尝试为数据结构类做作业。问题是 1) 使用定义的 UNIT_TEST 进行编译,然后使用 -d yes 运行以查看所需时间(以秒为单位)。在提交框中报告该时间以及您在测试选择排序时发现的时间。哪个更快?
我无法理解,我做错了什么。我收到此错误:
到目前为止,这是我的代码:
c++ - 无法编译布尔连接
我的 Catch Testframework 中有以下简单的表达式。理想情况下,如果测试失败,测试应该发出警告。
不幸的是,Catch 无法编译以下代码片段:
Visual Studio 2015 发出以下错误:
我会期待类似以下的内容:
这是否可能与 Catch 或我必须使用额外的括号:
c++ - 获取将在 Catch 中运行的部分
Catch2 单元测试框架允许您拥有测试部分。从文档:
有没有办法预先确定特定运行的 s列表testCaseStarting()
是什么?SECTION
例如,给定:
我想要一些方法来获得{b}
第一次,{c, d}
第二次和{c, e}
第三次。有没有办法做到这一点?
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
:
c++ - xcode 从源代码中删除奇怪的控制字符
**更新
我试图了解 XCode 如何/为什么似乎在我的 C++ 源代码中添加了一个奇怪的字符,而实际上它正在删除它。我正在创建一个简单的类并在学习 C++ 课程时使用 CATCH2 测试框架。我有一个将数字转换为单词的 numwords 类。
它失败了:
然后我通过仔细地将预期值复制/粘贴回我的测试中发现确实存在一些不可见的差异。就在那时,它开始神奇地过去了。我查看了我的 git diff 并看到了这个:
这个奇怪的控制字符只显示在差异中,并且只有在我尝试在失败后从差异或控制台复制/粘贴文本之后。添加特殊字符会导致测试通过。如果我在键盘上手动键入值“四十七”,特殊字符就会消失并且它FAILS。世界上到底发生了什么?这个 ^P 隐藏字符是什么?
numword.cpp 的来源如下:
我刚刚做了一些研究,发现 ^P 是一个数据链接转义码 (DLE)。我仍然不确定如何键入它。我的 numword.cpp 逻辑如何添加它?我哪里错了?
c++ - 如何在 Bazel 项目中设置 Catch2
我已经开始了一个简单的 C++ 项目,它使用 Bazel 作为构建系统,并希望将 Catch2 添加到它,作为测试框架。
这是我的项目到目前为止的样子:
BUILD 就在哪里
我希望能够为每个创建测试cc_library
,在这种情况下为Money
. 我尝试设置它,但对 Catch2 main 感到困惑。任何关于如何做到最好的建议都值得赞赏!
c++ - 编译错误“错误:预期的';' 在声明列表末尾”使用 C++ 中的 Catch 测试框架
我正在尝试通过在其中实现一些简单的算法来学习 C++。为了测试这些算法,我想使用Catch2。这是我为二进制搜索提出的程序:
我将catch.hpp
单个头文件复制到同一目录中。问题是当我尝试g++
在我的 Mac 上使用命令编译它时,我收到以下错误:
简而言之,Catch2 源代码本身正在生成几个相同的语法错误。我怀疑这可能与编写的 C++ Catch 的“版本”与我的编译器期望的不同有关,但我无法通过 Google 搜索此错误快速确定这是否是问题。
以下是我的g++
编译器的详细信息:
知道是什么导致了这个错误,以及如何让 Catch2 单元测试工作吗?