【发布时间】:2019-06-01 10:08:42
【问题描述】:
我正在尝试为我构建的库设置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);
}
“可执行项目”只是使用库(它是实际的应用程序)。该项目中的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)
【问题讨论】:
-
请分享您的根级 CMakeLists.txt
-
@ap-osd 我将根级文件添加为编辑。
-
“当我手动测试库的功能时它工作正常”是什么意思?因为您还说“测试没有失败”。
-
@ap-osd 抱歉,这不相关。我已经把它删了。那是在我添加我认为的测试功能之前。请忽略。
标签: c++ visual-studio cmake catch2