使用CLion的Boost.TEST:“测试框架意外退出”

时间:2018-10-22 07:02:33

标签: c++ clion boost.test

我在Mac OS Mohave上使用CLion。我试图将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。

控制台输出:

测试于09:48开始... ... /序列--run_test = test --logger = HRF,全部--color_output = false --report_format = HRF --show_progress = no 你好,世界! 流程结束,退出代码为0

感谢所有帮助和建议!

感谢您的帮助。我最终创建了一个用于测试的模板项目。然后,我将该项目复制到带有实际代码的项目中,并添加 将子目录(该目录的名称与_boost_test_project )添加到CMakeFile。

之后,您将在CLion中获得“运行所有测试”功能。

1 个答案:

答案 0 :(得分:0)

您的程序代码和测试代码应分开。如doc中所述,该行

Sub SaveData()
    Application.ScreenUpdating = False
    Dim Rng As Range
    Dim MyWorkSheet As Worksheet
    Set MyWorkSheet = Worksheets("Sheet2")
    For Each Rng In MyWorkSheet.Range("J8:AS78")
        If Rng.Value > 0 Then
            Rng.Value = Rng.Value
        End If
    Next Rng
    Application.ScreenUpdating = True
End Sub

创建主入口点。

我不知道是否可以在main.cpp中编写测试用例。在单元测试中,您需要检查组件的接口。

CMakeLists.txt:

#define BOOST_TEST_MODULE My Test

main.cpp

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)

MyMath.h:

#include "MyMath.h"

int main() {
    MyMath mm;
    mm.add(1,2);

    return 0;
}

test1.cpp:

#ifndef MY_MATH_H
#define MY_MATH_H

class MyMath {
public:
    int add(int l, int r) { return l + r; }
};

#endif

现在,我可以使用cmake构建它,并使用ctest进行测试。