Boost.TEST с CLion: "Тестовый фреймворк неожиданно завершил работу"
Я использую CLion на Mac OS Mohave. Я пытался добавить Boost.TEST в мой проект на C++, но в среде IDE выдается сообщение "Тестовый фреймворк неожиданно завершился".
Вот мои CMakeLists:
cmake_minimum_required(VERSION 3.12)
project(sequences)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
set(CMAKE_CXX_STANDARD 11)
add_executable(sequences main.cpp)
target_link_libraries(sequences ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
enable_testing()
И простой тест:
#include <iostream>
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(test) {
BOOST_CHECK_EQUAL(1, 1);
}
using namespace std;
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Инструкции на веб-сайте jetbrains являются поддельными по поводу использования Boost.TEST, и все исправления этой проблемы, которые я обнаружил в Интернете, устарели.
Я использую Boost v.1.67.0, установленный вместе с homebrew.
Консольный вывод:
Тестирование началось в 09:48 ... .../sequence --run_test=test --logger=HRF,all --color_output=false --report_format=HRF --show_progress=no Привет, мир! Процесс завершен с кодом выхода 0
Вся помощь и советы приветствуются!
Спасибо за помощь. Я закончил тем, что создал шаблонный проект для тестов. Затем я копирую этот проект в свой проект с актуальным кодом и добавляю add_subdirectory (name_of_the_directory_with_boost_test_project) в CMakeFile.
После этого вы получаете функциональность "выполнить все тесты" в CLion.
1 ответ
Код вашей программы и тестовый код должны быть разделены. Как указано в документе, строка
#define BOOST_TEST_MODULE My Test
создает основную точку входа.
Я не знаю, можно ли написать контрольные примеры в main.cpp. В модульных тестах вы проверяете интерфейс ваших компонентов.
CMakeLists.txt:
cmake_minimum_required(VERSION 3.12)
project(sequences)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
set(CMAKE_CXX_STANDARD 11)
add_executable(main src/main.cpp)
add_executable(test1 src/test1.cpp)
target_link_libraries(test_suite1 ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
enable_testing()
add_test(NAME test_suite1 COMMAND test_suite1)
main.cpp
#include "MyMath.h"
int main() {
MyMath mm;
mm.add(1,2);
return 0;
}
MyMath.h:
#ifndef MY_MATH_H
#define MY_MATH_H
class MyMath {
public:
int add(int l, int r) { return l + r; }
};
#endif
test1.cpp:
#define BOOST_TEST_MODULE My Test
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
#include "MyMath.h"
BOOST_AUTO_TEST_CASE(test) {
MyMath mm;
BOOST_CHECK_EQUAL(mm.add(1,2), 3);
}
Теперь я могу собрать его с помощью cmake и протестировать с помощью ctest.