Catch2 with CMake and Visual Studio
Catch2 with CMake and Visual Studio
我正在尝试为我构建的库设置 Catch2 测试框架。我正在使用CMake和Visual Studio 2017。
我的项目结构是:
executable-project/
|-- library
|--include/
| |--SUT.h
|--src/
| |--SUT.cpp
|--tests/
| |--catch.hpp
| |--SUTTest.cpp
|CMakeLists.txt
|include/
|src/
| |--main.cpp
|CMakeLists.txt
SUT.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 Studio中生成此解决方案时,构建工作正常。
但是,尽管断言Factorial(0) == 0
.此外,Visual Studio 不会发现 tests 文件夹中的测试。我想要实现的是:
当我单击"在Visual Studio中生成"时,测试将作为生成的一部分运行。
(可选(以便 Visual Studio 能够发现测试。
编辑:
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)
终于设法让 Catch2 与 Visual Studio 配合使用。
首先,我从他们的 GitHub 下载了 Catch2 版本,并使用它将其安装在我的计算机上(这实际上记录在这里(。
cmake -Bbuild -S. -DBUILD_TESTING=OFF
cmake --build build/ --target install (Need admin rights)
这将在 C:\Program Files (x86(\Catch2 中安装 Catch2。然后我将此安装目录中的所有内容复制到项目的 deps/Catch2 文件夹中。然后只需将以下内容添加到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 Studio。生成此项目时,我的单元测试将运行。希望这对任何尝试与CMake集成的人都有帮助。
尽管断言阶乘(0( == 0,但测试并未失败
你应该断言什么是真实的/预期的。然后,如果你编写的代码是错误的,它就会失败。
REQUIRE( Factorial(0) == 1 );
(不是== 0
(
当我单击"在Visual Studio中构建"时,要运行的测试将作为 构建。
在Visual Studio IDE中,生成和运行是两个独立的步骤。如果要自动对其进行排序,请编写一个简单的.bat
脚本,该脚本首先生成然后运行。
(可选(以便 Visual Studio 能够发现测试。
Catch2 具有 CMake 集成,其中包含用于在 CTest 中自动注册TEST_CASE
的 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 集成。
- Visual Studio 2015:Extern "C" 和 "export" 关键字
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 试图在visual studio上用C++创建一个桌面应用程序
- 如何在MS Visual Studio 2019中运行QT UI
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Visual Studio Code - C++ Debugger 無法啟動
- Visual Studio 2019:插入多个C++风格的单行注释
- Visual Studio Code "undefined reference to `WinMain@16'"
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- Visual Studio中的函数声明和函数定义问题
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- Visual Studio mkl_link_tool.exe链接错误
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 不同的Visual Studio版本中缺少.dll
- 用Visual Studio在C++中嵌入Julia
- Visual Studio 2017循环自动向量化问题
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- Visual Studio在尝试读取resource.txt文件时崩溃
- Visual Studio 2017 不允许我创建 C++ 专用模板