Boost.TEST с CLion: «Тестовый фреймворк неожиданно завершил работу» - PullRequest
0 голосов
/ 22 октября 2018

Я использую 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, все --color_output = false --report_format = HRF --show_progress = нет Привет, Мир!Процесс завершен с кодом выхода 0

Спасибо за помощь и советы!

Спасибо за помощь.Я закончил тем, что создал шаблонный проект для тестов.Затем я копирую этот проект в свой проект с актуальным кодом и добавляю add_subdirectory ( name_of_the_directory_with_boost_test_project ) в CMakeFile.

После этого вы получаете функциональность «все тесты» в CLion.

1 Ответ

0 голосов
/ 22 октября 2018

Ваш программный код и ваш тестовый код должны быть разделены.Как указано в doc , строка

#define BOOST_TEST_MODULE My Test

создает основную точку входа.

Я не знаю, можно ли писать контрольные примеры в main.каст.В модульных тестах вы проверяете интерфейс ваших компонентов.

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.

...