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

c++ - 如何允许将向量传递给 INFO()、CAPTURE()、WARN() 等,同时避免非法扩展 std 命名空间?

在使用 gcc 6.2.0 的 Catch Unit Test v1.8.1 中,当测试失败时,我试图通过将向量传递给INFO(...)or来方便地输出向量的内容CAPTURE(...)。为此,我重载了流插入运算符:


std如果我(非法)如上所述扩展命名空间,那么它可以工作,我会看到所需的输出:

但是为了合法,当我尝试将operator<<重载移出std命名空间并进入全局命名空间(通过注释 out )时,由于将向量传递给宏#define THIS_WORKS_BUT_EXTENDING_NAMESPACE_STD_IS_ILLEGAL,代码无法编译。CAPTURE()

根据Catch docs,我尝试用operator <<重载替换Catch::toString重载:

Catch::StringMaker专业:

CAPTURE()但在任何一种情况下,由于将向量传递给宏,测试仍然无法编译。

Catch 文档说将operator<<重载放入与您的类型相同的命名空间,但std::vector不是我的类型,并且将该重载放入命名空间std是非法的。

但是我能够找到CAPTURE()(或INFO(),或WARN()等)接受std::vector参数的唯一方法是非法将operator<<重载放入命名空间std

有没有适当的、合法的方式来做到这一点?

0 投票
0 回答
703 浏览

visual-c++ - 使用 Visual Studio 的 catch.hpp 错误消息

使用 Visual Studio 2015 使用catch.hpp单元测试编译测试代码。我需要编写代码来与串行端口交互,并且需要与 Widnows API 交互并且需要包含windows.h

但是编译器会产生以下错误消息的抱怨。

严重性代码描述项目文件行抑制状态
错误 C2888 'Catch::Colour::Colour(Catch::Colour::Code)': 符号不能在命名空间 'Catch' NMCR_Testing c:\users\ahajmousa\google drive\cto 中定义projects\new mc receiver\software\testing\nmcr_testing\nmcr_testing\catch.hpp 7796
错误 C2888 'Catch::Colour::Colour(const Catch::Colour &)':符号不能在命名空间 'Catch' NMCR_Testing c 中定义: \users\ahajmousa\google drive\cto projects\new mc .... ......

代码:

如果我不包含 widnows.h,错误就会消失。有没有办法让 catch.hpp 编译而不会出现这些错误。

0 投票
2 回答
81 浏览

c++ - Catch 断言中带参数的函数表达式的字符串转换

如果我运行以下测试女巫Catch

我得到以下输出

为什么 Catch 可以在运算符表达式中转换xandy为字符串,x == y但不能在函数调用表达式中eq(x, y)?是否有可能以类似的方式对函数调用表达式进行字符串化以获得如下输出:

0 投票
0 回答
102 浏览

c++ - C/C++ 项目包含文件夹,其中包含单独的构建外壳,不能相互包含文件

我有一个复杂的 C++ 项目文件夹,其中包含两个文件夹。

  • 具有多个子文件夹和 CmakeList.txt 文件的 C++ src文件夹。src 文件夹包含 main.cpp 文件。
  • 一个 C++ 构建标准外部文件夹ExtLib,其中包含多个子文件夹和一个用于编译的build.sh脚本和 CmakeList.txt 文件。.cpp 文件链接(包括头文件(.h)文件)到这个 ExtLib 文件夹。

Project 文件夹包含一个主 build.sh 文件,该文件编译项目并创建一个包含调试和发布配置的构建文件夹。它还包含一个 CmakeList.txt 文件,我想它会在 build.sh 文件执行时执行。我需要在这个项目上执行的任务是创建一个新的测试文件夹并添加一个文件 ( runtests.cpp ),该文件对 src 文件夹 .cpp 文件中编写的代码执行单元测试(使用 catch 单元测试)。

我面临的问题:

  1. 第一个问题是当我在我的测试文件夹中创建一个源测试文件,并试图从 src 文件夹中包含头文件时,编译器会抛出一个致命错误,即找不到此类 (.h) 文件。(来自 src 文件夹)。有时问题也会出现在 src 文件夹文件中,因为它们无法找到 ExtLib 文件夹文件。

  2. 第二个问题是,如果通过某种方式我能够成功地包含来自其他 src 或 ExtLib 文件夹的文件,我如何能够运行测试源文件 runtests.cpp 来执行我的测试用例?

项目层次结构如下所示:

TestProject │ build.sh │ CMakeList.txt
└───ExtLib │ │ buildscript.sh │ │ CMakeList.txt │ └───subfolder1 │ └───subfolder2(containing sub-folders) └───src │ │ main.cpp │ │ CMakeList.txt │ └───folder1 │ └───folder2(containing sub-folders) └───tests │ runtests.cpp │ catch.hpp

我是否也需要为我的测试文件夹包含一个 CMakelist.txt 文件?如果必须要怎么做?我对这个领域很陌生。希望大家能帮忙。谢谢 Rg

0 投票
0 回答
266 浏览

c++ - CmakeList - 无法为 C++ 项目子文件夹创建正确的 CMakelist

我有一个包含两个文件夹的 C++ 项目文件夹。

  1. 具有多个子文件夹和 CmakeList.txt 文件的 C++ src 文件夹。src 文件夹包含 main.cpp 文件。

    /li>
  2. 一个 C++ 构建标准外部文件夹 ExtLib,其中包含多个子文件夹和一个用于编译的 build.sh 脚本和 CmakeList.txt 文件。src 文件夹中的 .cpp 文件链接(包括 header(.h) 文件)到这个 ExtLib 文件夹。

Project 文件夹包含一个主 build.sh 文件,该文件编译项目并创建一个包含调试和发布配置的构建文件夹。它还包含一个 CmakeList.txt 文件,我想它会在 build.sh 文件执行时执行。我需要在这个项目上执行的任务是创建一个新的测试文件夹并添加一个文件 (RunAllTests.cpp),该文件对 src 文件夹 .cpp 文件中编写的代码执行单元测试(使用 catch 单元测试)。

我面临的问题:

  • 第一个问题是当我在我的测试文件夹中创建一个源测试文件并尝试从 src 文件夹中包含头文件时,编译器会抛出一个致命错误,即找不到此类 (.h) 文件,这意味着如果我在其中包含一个文件测试文件夹源文件,其中包括来自 ExtLib 文件夹的头文件 - 然后我通过 src 文件夹文件在测试文件夹文件中链接来自 ExtLib 文件夹的文件时出错。我所有的 Cmakelist 文件都正确写入了吗?

    /li>
  • 第二个问题是,如果通过某种方式我能够成功地包含来自其他 src 或 ExtLib 文件夹的文件,我如何能够运行测试源文件 RunAllTests.cpp 来执行我的测试用例?我所有的 Cmakelist 文件都正确写入了吗?

自从 3 周以来,我一直被困在这个问题上,我迫切需要一个解决方案。下面是编译器错误:

编译器错误:

项目层次结构如下所示:

0 投票
0 回答
73 浏览

c++ - 如何对复杂功能进行单元测试

我有一个类 XYZ,它有一些功能,我需要使用 Catch 单元测试进行测试。我处于困惑状态,测试该功能的可能性是什么。有人可以帮忙吗?

测试代码如下:

溴/RG

0 投票
0 回答
2021 浏览

c++ - 模拟 Catch - C++ 测试

能否请您推荐一个模拟系统,用于 Catch 测试 C++?我真的很想要一个不需要我定义任何新类(就像我看到 Google Mock 所做的那样):),类似于 Java 的 Mockito。到目前为止,我已经检查了 Mockitopp 和 Fakeit。Fakeit 的问题是它不支持多重继承,而 Mockitopp 的功能似乎比 Fakeit 少(我也不知道它是否支持多重继承)。Fakeit 的优点在于它实际上似乎与 Catch 和许多其他测试框架集成。

谢谢你。

0 投票
1 回答
84 浏览

c++ - 在一组动态文件上运行 Catch 测试用例

我正在寻找一种在 Catch 框架 ( https://github.com/philsquared/Catch ) 中对一组文件运行测试用例的方法。

我知道我可以做这样的事情:

但问题是这将在第一个错误时中止。

因此我想做这样的事情:

理想情况下,还可以在命令行上调用单元测试时指定测试文件所在的文件夹。

有谁知道Catch是否可以实现这样的事情?

0 投票
1 回答
1612 浏览

c++ - C++ 使用 Makefile 捕获框架“多重定义”链接器错误

为 Google 流量提交我自己的答案。考虑 Makefile

我正在为 Catch v1.9.5 编译单元测试。将以下内容与他们的文档给出的示例进行比较:

make产量:

删除对catch.oinrun-tests的引用会导致链接器抱怨未定义的引用。catch.o有什么问题main.cxx导致冗余定义?

0 投票
4 回答
2278 浏览

c++ - 带有 Catch 库的未解析外部符号

我正在迁移一些项目以使用CMake构建系统。现在我正在使用Catch库添加带有一些单元测试的项目。它是仅标头库。旧的Visual Studio项目构建良好,但新的CMake项目提供未解决的外部符号链接器错误。我在我的一个源文件中定义了 CATCH_CONFIG_MAIN。添加了测试所需的其他项目的所有cpp文件,并且链接了其他测试项目所依赖的所有库。尽管如此,我只有从CMake项目生成的未解决的外部符号错误:

显然我缺少从vcxproj添加一些配置,CMakeLists.txt但我目前无法弄清楚。