标签: catch-unit-test

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

我正在使用Catch测试框架.

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

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

我找不到任何关于如何做到这一点的文档.怎么在Catch完成?

c++ unit-testing catch-unit-test

27
推荐指数
2
解决办法
5009
查看次数

捕获lib(单元测试)和CTest(CMake)集成

我正在寻找Catch CatchLib与CMake测试(Ctest)集成的成功示例.据我所知这是另外的cmake脚本,它必须解析应用程序输出?有人写过这个吗?可能分享了这个?

==================================================

更新(已找到解决方案):

我已经向CatchLib 提交了cmake脚本,用于集成Catch与CTest.这是Fraser99的CMake的脚本的简化版本,在这里

c++ unit-testing cmake ctest catch-unit-test

20
推荐指数
2
解决办法
1万
查看次数

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

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

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

#define CATCH_CONFIG_MAIN
#include "catch.hpp"
#include <vector>

TEST_CASE( "are vectors equal", "vectors")
{
  std::vector<int> vec_1 = {1,2,3};
  std::vector<int> vec_2 = {1,2,3};

  REQUIRE (vec_1.size() == vec_2.size());

  for (int i = 0; i < vec_1.size(); ++i)
    REQUIRE (vec_1[i] == vec_2[i]);
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?像魔术一样的东西REQUIRE_VECTOR_EQUAL

另外,我的上述解决方案是,如果一个数组包含双精度数则传递{1.0, 2.0, 3.0}; 如果因此而认为两个向量不相等就没问题.

c++ vector c++11 catch-unit-test

10
推荐指数
1
解决办法
2610
查看次数

模拟Catch - C++测试

请问,请问一个与Catch一起用于测试C++的模拟系统?我真的很喜欢一个不要求我定义任何新类的东西(比如我看过Google Mock):),类似于Mockito for Java.到目前为止,我已经检查了Mockitopp和Fakeit.Fakeit的问题在于它不支持多重继承,而Mockitopp似乎比Fakeit具有更少的功能(我不知道它是否支持多重继承).Fakeit有什么好处,它实际上似乎与Catch和许多其他测试框架集成.

谢谢.

c++ tdd unit-testing mocking catch-unit-test

10
推荐指数
0
解决办法
1576
查看次数

使用C++ Catch测试浮点std :: vector

在Catch C++单元测试框架中是否有可能比较基于浮点类型的std :: vectors?我知道我可以比较两个容器和每个元素的大小(使用约),但这很麻烦.

积分类型向量的比较适当地工作.

现在,我必须使用这样的结构

REQUIRE(computed.size() == expected.size());
for (size_t i = 0; i < computed.size(); ++i)
    REQUIRE(computed[i] == Approx(expected[i]));
Run Code Online (Sandbox Code Playgroud)

但我想使用一个衬垫(它适用于整体类型):

REQUIRE(computed == expected);
Run Code Online (Sandbox Code Playgroud)

c++ vector c++11 catch-unit-test

8
推荐指数
2
解决办法
860
查看次数

使用Catch C++进行单元测试会干扰我的main()

我是单元测试的新手,并决定将Catch框架用于c ++,因为它似乎很容易与其一个头文件集成.但是,我有一个多文件二进制搜索树程序(文件是:main.cpp,Tree.h,Tree.hxx,TreeUnitTests.cpp,catch.hpp).如果我在main.cpp中注释掉我的int main()函数,我只能运行单元测试.我知道它与我的TreeUnitTests.cpp中的'#define CATCH_CONFIG_MAIN'声明冲突,但如果我不包含该声明,我无法运行单元测试.每次我想运行单元测试时,如何在不必评论main()的情况下运行两者?

这是我正在使用的头文件:https: //raw.githubusercontent.com/philsquared/Catch/master/single_include/catch.hpp

我发现它的Catch教程并用作指南:https: //github.com/philsquared/Catch/blob/master/docs/tutorial.md

一些相关文件供参考: main.cpp:

//******************* ASSN 01 QUESTION 02 **********************

#include "Tree.h"
#include <iostream>

using namespace std;

/*
int main()
{

    //creating tree with "5" as root
    Tree<int> tree(5);
    tree.insert(2);
    tree.insert(88);
    tree.inorder();
    cout << "does tree contain 2?: ";
    cout << tree.find(2) << endl;
    cout << "does tree contain 3?: ";
    cout << tree.find(3) << endl;

    Tree<int> copytree(tree);
    cout << "copied original tree..." << endl;
    copytree.preorder();
    cout << "after deletion …
Run Code Online (Sandbox Code Playgroud)

c++ unit-testing catch-unit-test

8
推荐指数
2
解决办法
3004
查看次数

如何使我的 cmake 目标用于 catch2 测试和项目运行更具可扩展性和合理性?

经过大量的努力和研究,我成功地创建了多个 cmake 目标,以将运行我的程序与运行代码测试分开。但我不喜欢我所做的,因为我看到CMakeList.txt文件中有冗余。

目前,我必须将每个新的源文件添加到两个目标,以便源目标可以使用该文件进行构建,并且测试目标可以构建,因为它们需要测试该文件。我无法将整个源目标放入测试目标中,因为这样测试目标将包含两个主文件。

我对如何修复冗余的唯一想法是将源目标中没有文件的所有文件main.cpp放入某个组中,然后将该组附加到两个目标。这样,源目标仅包含main.cpp文件和源文件组,测试目标包含其所有测试和源文件组。因此文件组基本上是两个目标之间的所有重叠部分。我只是不知道该怎么做。

研究

以下是我发现的其他堆栈溢出问题,这些问题帮助我到达了现在的位置:

代码

这是我为试验 catch2 和 cmake 而制作的测试项目,目前适用于构建目标“tests”和“catch2Test”:

/catch2Test      // <-- project folder
  |---- /include
  |       |---- /catch2
  |               |---- catch.hpp
  |---- /src
  |       |---- /myMath
  |       |       |---- factorial.cpp
  |       |       |---- factorial.h
  |       |---- main.cpp
  |       |---- CMakeLists.txt
  |---- /test
  |       |---- test_main.cpp
  |       |---- test_factorial.cpp
  |       |---- CMakeLists.txt
  |---- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

/include/catch2/catch.hpp是catch2的库头文件

/src/myMath/包含阶乘实现的头文件和代码文件,与catch2 教程中使用的相同。这也是阶乘测试的实现的来源。

/src/main.cpp …

c++ unit-testing cmake catch-unit-test

8
推荐指数
1
解决办法
4101
查看次数

如何比较catch2中的浮点数

我正在使用 Catch v2.13.1

比较浮点值的正确方法是什么?我以为下面的会失败,但都通过了。

REQUIRE(1147332687.7189338 == Approx(1147332688.4281545).margin(0.0001));
REQUIRE(1147332687.7189338 == Approx(1147332688.4281545));
Run Code Online (Sandbox Code Playgroud)

然而这按预期失败了

REQUIRE(abs(1147332687.7189338 - 1147332688.4281545) <= Approx(0).margin(0.0001));
Run Code Online (Sandbox Code Playgroud)

我不明白为什么前两个语句不起作用

c++ catch-unit-test catch2

8
推荐指数
1
解决办法
8792
查看次数

catch c++测试框架中REQUIRE_NOTHROW的要点

这个断言的要点是什么REQUIRE_NOTHROW?如果我只是放置一条语句并且不将其包装在任何断言宏中,那么如果它无论如何抛出都会失败?

catch-unit-test

5
推荐指数
1
解决办法
2048
查看次数

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)"

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

CMake 列表:

PROJECT(cpp_project)
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
INCLUDE(CheckCXXCompilerFlag)

CHECK_CXX_COMPILER_FLAG(-std=c++14 COMPILER_SUPPORTS_CXX14)
IF (COMPILER_SUPPORTS_CXX14)
    ADD_COMPILE_OPTIONS("-std=c++14")
ELSE ()
    MESSAGE(FATAL_ERROR "Compiler ${CMAKE_CXX_COMPILER} has no C++14 support.")
ENDIF ()


set(BASE_SRCS src/Bound.cpp src/Bound.hpp src/Infinity.cpp src/Infinity.hpp src/AbstractInterval.cpp src/AbstractInterval.hpp
        src/UndefinedOperationException.hpp src/IntegerAbstractInterval.cpp src/IntegerAbstractInterval.hpp src/FloatingPointAbstractInterval.cpp
        src/FloatingPointAbstractInterval.hpp)
ADD_COMPILE_OPTIONS("-Wall" "-Wextra" "-Wpedantic" "-Werror" )
ADD_LIBRARY(cpp-project ${BASE_SRCS})
INCLUDE_DIRECTORIES(libs/variant/include)


set(EXECUTABLE_OUTPUT_PATH bin)
set(CATCH_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/catch)
add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${CATCH_INCLUDE_DIR})
set(TEST_SRCS tests/InfinityTest.cpp tests/IntegerIntervalTest.cpp)
add_executable(tests ${BASE_SRCS} ${TEST_SRCS})
target_link_libraries(tests Catch)
Run Code Online (Sandbox Code Playgroud)

这是测试文件IntegerIntervalTest.cpp

#include …
Run Code Online (Sandbox Code Playgroud)

c++ testing undefined-reference catch-unit-test

5
推荐指数
1
解决办法
7347
查看次数