使用 CMake 和 Visual Studio 的 Catch2
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
只是测试基于 example.
定义的阶乘函数
我在图书馆的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);
}
"executable-project" 只是使用库(它是实际的应用程序)。该项目中的 CMakeLists.txt
将库动态链接到它。
当我在 Visual Studio 中构建此解决方案时,构建工作正常。
然而,尽管断言 Factorial(0) == 0
,测试并没有失败。此外,Visual Studio 未发现测试文件夹中的测试。我想要实现的目标是:
当我点击 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)
the test isn't failing despite asserting that the Factorial(0) == 0
你应该断言什么是 true/expected。那么如果你写的代码错了,就会失败。
REQUIRE( Factorial(0) == 1 );
(不是== 0
)
When I click on Build in Visual Studio, the tests to be run as part of
the build.
在 Visual Studio IDE 中,构建和 运行 是两个独立的步骤。如果你想自动排序,写一个简单的 .bat
脚本,首先构建然后 运行s.
(Optional) to be able for Visual Studio to discover the tests.
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 与 Visual Studio 一起工作。
首先,我从他们的 GitHub 下载了 Catch2 版本,并使用(这实际上记录在案 here)将其安装在我的计算机上。
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 集成的人都有帮助。
我正在尝试为我构建的库设置 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
只是测试基于 example.
我在图书馆的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);
}
"executable-project" 只是使用库(它是实际的应用程序)。该项目中的 CMakeLists.txt
将库动态链接到它。
当我在 Visual Studio 中构建此解决方案时,构建工作正常。
然而,尽管断言 Factorial(0) == 0
,测试并没有失败。此外,Visual Studio 未发现测试文件夹中的测试。我想要实现的目标是:
当我点击 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)
the test isn't failing despite asserting that the Factorial(0) == 0
你应该断言什么是 true/expected。那么如果你写的代码错了,就会失败。
REQUIRE( Factorial(0) == 1 );
(不是== 0
)
When I click on Build in Visual Studio, the tests to be run as part of the build.
在 Visual Studio IDE 中,构建和 运行 是两个独立的步骤。如果你想自动排序,写一个简单的 .bat
脚本,首先构建然后 运行s.
(Optional) to be able for Visual Studio to discover the tests.
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 与 Visual Studio 一起工作。
首先,我从他们的 GitHub 下载了 Catch2 版本,并使用(这实际上记录在案 here)将其安装在我的计算机上。
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 集成的人都有帮助。