我正在尝试为我构建的库设置Catch2测试框架。我正在使用CMake和VisualStudio2017。
我的项目结构是:
executable-project/
|-- library
|--include/
| |--SUT.h
|--src/
| |--SUT.cpp
|--tests/
| |--catch.hpp
| |--SUTTest.cpp
|CMakeLists.txt
|include/
|src/
| |--main.cpp
|CMakeLists.txtSUT.h、SUT.cpp和SUTTest.cpp只是在测试基于示例定义的阶乘函数。
我在库中的CMakeLists.txt文件是
cmake_minimum_required (VERSION 3.8)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
file(GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB TEST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp")
add_library(MY_LIBRARY ${HEADER_FILES} ${SOURCE_FILES} ${TEST_FILES})
target_include_directories(MY_LIBRARY PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
source_group("Test Files" FILES ${TEST_FILES})SUTTest.cpp文件是:
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
#include "SUT.h"
TEST_CASE("Factorials are computed", "[factorial]")
{
SUT sut;
REQUIRE(sut.Factorial(0) == 0);
REQUIRE(sut.Factorial(1) == 1);
REQUIRE(sut.Factorial(2) == 2);
REQUIRE(sut.Factorial(3) == 6);
REQUIRE(sut.Factorial(10) == 3628800);
}“可执行项目”只是利用了库(它是实际的应用程序)。该项目中的CMakeLists.txt动态地将库链接到它。
当我在Visual中构建此解决方案时,生成可以正常工作。
然而,测试并没有失败,尽管断言Factorial(0) == 0。此外,Visual没有在“测试”文件夹中发现测试。我想要达到的目标是:
编辑:
cmake_minimum_required (VERSION 3.8)
project("My Project")
file(GLOB HEADER_FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")
file(GLOB SOURCE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
add_subdirectory(library)
add_executable(MY_APP main.cpp ${HEADER_FILES} ${SOURCE_FILES})
target_include_directories(MY_APP PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_link_libraries(MY_APP MY_LIBRARY)发布于 2019-09-14 14:51:14
最后,设法使Catch2与Visual一起工作。
首先,我从他们的Catch2中下载了GitHub版本,并使用(这实际上是文档化的这里)将其安装在我的计算机上。
cmake -Bbuild -S. -DBUILD_TESTING=OFF
cmake --build build/ --target install (Need admin rights)这将在C:\Program (x86)\Catch2 2中安装x86。然后,我将这个安装目录中的所有内容复制到项目的deps/Catch2 2文件夹中。然后将下面的内容添加到CMakeLists.txt中:
find_package(Catch2 REQUIRED PATHS "${CMAKE_CURRENT_SOURCE_DIR}/deps/Catch2")
target_link_libraries(MY_LIBRARY Catch2::Catch2)
include(CTest)
include(Catch)
catch_discover_tests(MY_LIBRARY)这会将RUN_TESTS项目添加到Visual中。当我构建这个项目时,我的单元测试会运行。希望这对任何试图与CMake集成的人都有帮助。
发布于 2019-09-03 06:18:08
尽管断言Factorial(0) == 0没有失败,但测试没有失败。
你应该断言什么是真实的/期望的。那么,如果您编写的代码是错误的,它将失败。
REQUIRE( Factorial(0) == 1 ); (非== 0)
在中单击build时,将作为生成的一部分运行测试。
在中,生成和运行是两个独立的步骤。如果您想要自动排序,请编写一个简单的.bat脚本,该脚本首先构建,然后运行。
(可选)使Visual能够发现测试。
Catch2具有CMake集成,其中包含用于在CTest中自动注册TEST_CASE__s的CMake脚本。
cmake_minimum_required(VERSION 3.5)
project(baz LANGUAGES CXX VERSION 0.0.1)
find_package(Catch2 REQUIRED)
add_executable(foo test.cpp)
target_link_libraries(foo Catch2::Catch2)
include(CTest)
include(Catch)
catch_discover_tests(foo)详情请参见Catch2 CMake集成。
https://stackoverflow.com/questions/56405754
复制相似问题