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

c++ - 如何在 Catch 框架中使用浮点容差?

我正在使用Catch测试框架。

介绍性博客文章中,作者提到了以下功能:

  • 以易于使用的方式支持浮点公差

我找不到任何有关如何执行此操作的文档。这是如何在 Catch 中完成的?

0 投票
2 回答
2339 浏览

c++ - 捕获测试用例顺序

我可以用CatchTEST_CASE保证多个s的执行顺序吗?我正在使用 LLVM 测试一些代码,它们有一些我需要显式初始化的卑鄙的全局状态。

现在我有一个这样的测试用例:

我想要的是将它重构为三个TEST_CASE

  • 一个用于应该通过编译的测试,
  • 一个用于应该失败的测试,并且
  • 一个用于应该通过解释的测试(将来可能会进一步划分)。

但是我不能简单地将测试内容移动到另一个TEST_CASE中,因为如果TEST_CASE在设置不方便的全局变量之前调用它,那么它们将不会被初始化并且测试将虚假地失败。

0 投票
2 回答
1187 浏览

c++ - C++ 中的异常和 BDD - Catch 库

到目前为止,我一直在使用 Boost.Test,但现在正在考虑将 BDD 与 Catch 一起使用,但我在找出一种处理异常的好方法时遇到了一些麻烦。假设我有这样的测试:

现在我想知道如何处理 connect() 会以一种很好的方式抛出异常的事实。我想我可以将异常保存并存储在 try-catch 中并在 THEN 下进行验证,但这似乎不太好。在我的 Boost.Test 测试用例中,我这样做了:

但这似乎不是很 BDD。人们在使用 BDD 测试时通常如何处理抛出异常的代码?

0 投票
2 回答
809 浏览

unit-testing - 处理可选测试

在CATCHGoogle Test和其他框架(至少在传统意义上,您指定这样做的原因并在输出中看到它)中没有跳过测试的方法让我想我是否需要它(我在过去的项目中一直在使用UnitTest++)。

通常,是的,不应该有任何理由跳过桌面应用程序中的任何内容——你要么测试它,要么不测试。但是在硬件方面——有些事情是无法保证的。

例如,我有两个设备:一个带有嵌入式蜂鸣器,但另一个 - 没有。在 UnitTest++ 中,我会查询系统,发现蜂鸣器不可用,然后跳过依赖于它的测试。当然,在 CATCH 中,我可以做类似的事情:在初始化期间查询系统,然后只排除所有带有“beeper”标签的测试(CATCH 中的一个特殊功能)。

但是,有一点不同:测试人员(我以外的其他人)会读取输出,但找不到提到的那些可选测试(而在 UnitTest++ 中,它们会被标记为已跳过,原因将作为输出的一部分提供)。他的第一个想法:

  • 这必须是测试应用程序的某个旧版本。
  • 也许我忘了启用套件 X。
  • 有些东西可能坏了,我应该问开发人员。
  • 等等,也许他们只是被跳过了。但为什么?无论如何,我会问开发人员。

此外,他可能只是没有注意到这些测试被跳过,而实际上它们可能不应该被跳过(即操作系统返回“false”,无论蜂鸣器是否存在,这是一个主要错误)。一种选择是将“跳过”的测试标记为通过,但这感觉像是一种不必要的解决方法。

是否有一些我不知道的聪明技术(即,我不知道,将可选测试完全分离成一个独立程序)?如果不是 - 那我应该坚持使用 UnitTest++ 吗?它可以完成这项工作,但我真的很喜欢 CATCH 的SECTIONstags,有助于避免代码重复。

0 投票
1 回答
1806 浏览

c++ - 如何检索或打印“Catch”信息记录缓冲区?

使用Catch single-include unit-tester,我有(通过)这样的测试

文档(上面链接)指出 INFO 已记录到缓冲区,但我还没有弄清楚如何转储或以其他方式检索缓冲区。该消息不会打印到我的控制台,而是我printf或推入coutcerror打印的其他内容,因此我的 i/o 设置正确。我尝试阅读源代码以找出消息的存放位置,但它很大且涉及。我想知道是否有人恰好知道如何检索消息?

0 投票
1 回答
445 浏览

c++ - 如何组织夹具数据并从 C/C++ 中的测试中访问它们

在给定的情况下,如何计算测试代码中数据夹具文件的路径:

  • test/{main.cpp,one_test.cpp,two_test.cpp}
  • 编译完成build/
  • test/fixtures/{conf_1.cfg}

我面临的问题如下:

到目前为止我找到的解决方案是在配置时定义一个宏:

这是在我wscript的 with中获得的

其他尝试包括__FILE__扩展为../test/one_test.cpp,但我无法使用它。

一些背景知识:我正在使用Catch 测试框架waf 构建工具

是否有可能取决于测试框架的常见做法或模式?

0 投票
3 回答
3996 浏览

c++ - 捕获单元测试库链接错误

我正在尝试使用下面链接的 CATCH 单元测试套件。 https://github.com/philsquared/Catch

但是,我无法成功使其正确。main.cpp和test.cpp如下。

当这两个文件位于同一个文件夹中时,我可以获得所需的结果。但是,我将 移动test.cpp到名为test. 它不再按预期工作,但会产生链接错误。

我的 cmake 设置如下所述。

file(GLOB_RECURSE INCS "./*.cpp")添加以包含位于子目录中的每个 cpp 源文件。并被include_directories(.)包括在内是为了让他们知道catch.hpp.

我很确定我做错了什么,但我不知道如何解决它。请建议我解决这个问题。

它在 Windows 上运行,使用 mingw gcc-4.9.1 编译并由 cmake ninja generator 生成。

编辑:我添加了前几行错误消息。

失败: cmd.exe /c cd 。&& C:\MinGW\bin\g++.exe CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/test/testTest.cpp.obj -o catchTest. exe -Wl,--out-imlib,libcatchTest.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 - loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd 。CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0): `Catch::getResultCapture()' 的多重定义

CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0):首先定义在这里

0 投票
1 回答
3690 浏览

c++ - 使用 CATCH C++ 单元测试框架测试两个 std::vector 是否相等

我是使用 CATCH 的新手,我想知道如何测试两个std::vectors是否相等。

我非常天真的尝试是这样的:

有一个更好的方法吗?魔法之类的东西REQUIRE_VECTOR_EQUAL

另外,我上面的解决方案是传递一个数组是否包含 doubles {1.0, 2.0, 3.0};如果两个向量因此而被认为不相等,那很好。

0 投票
1 回答
1170 浏览

c++ - 捕获单元测试订购

我想使用Catch对 C++ 库进行单元测试。但是,我需要按顺序运行大多数测试用例。即库需要以某种方式初始化,然后用户登录等。是否有任何设计模式可以实现这一点。

预先感谢。

0 投票
1 回答
63 浏览

catch-unit-test - 重复测试的好方法,插入额外的动作?

我喜欢 Catch 嵌套测试层次结构的方式,它通过组合工作。这感觉比 xUnit 框架的设置/拆卸更自然。

我现在有一组测试。我想做的,大约一半是插入一个加载/保存序列化测试,然后重复该点以下的所有测试,首先没有加载/保存,然后再次使用它从序列化过程加载的数据。即证明加载/保存是正确的。

如果 Catch 有什么可以帮助解决这个问题,我无法理解?如果是 phpUnit,我会考虑一串@depends测试,并使用@dataProvider带有布尔输入的 a。有点丑。

(如果这没有意义,请告诉我,我会尝试做一个最小的例子)