Я пытаюсь настроить 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 не обнаруживает тесты в папке тестов.То, чего я пытаюсь достичь, это:
Когда я нажимаю на Build в Visual Studio, тесты, которые должны быть выполнены как часть сборки.
(Необязательно), чтобы Visual Studio могла обнаруживать тесты.