带有 CLion 的 Boost.TEST:“测试框架意外退出”
Posted
技术标签:
【中文标题】带有 CLion 的 Boost.TEST:“测试框架意外退出”【英文标题】:Boost.TEST with CLion: "Test framework quit unexpectedly" 【发布时间】:2018-10-22 07:02:33 【问题描述】:我在 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 与 homebrew 一起安装。
控制台输出:
测试于 09:48 开始 ... .../sequences --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 中获得“运行所有测试”功能。
【问题讨论】:
我不明白你在做什么或试图用你的代码实现什么。 Boost_UNIT_TEST_FRAMEWORK 是一个单元测试框架。它不能在你的 main.cpp 中工作 @ThomasSablik 实际上可以。然而,用户提供的入口点应该正确初始化测试框架。见docs。 @VTT:是的,当然测试也需要一个入口点,但它与应用程序的入口点不同。您需要一个用于应用程序的main
函数和至少一个用于测试的main
函数。
@ThomasSablik 不,单元测试在任何方面都不是特别的。应用程序应该只有一个 main
函数初始化和运行测试,手动编写或由 boost 提供。
@VTT:你能提供一个例子作为答案吗?我无法想象这是如何工作的。
【参考方案1】:
您的程序代码和测试代码应该分开。如doc 中所述,该行
#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 进行测试。
【讨论】:
好的。基本上没有主要功能可以完成这项工作。那么如何将 boost.test 合并到我已经拥有库和入口点的现有项目中呢?再说一遍:我正在使用 CLion。我了解到它有一个集成的 Boost.Test 测试运行器。 BOOST_TEST_MODULE 为您的测试创建主入口点。为每个类创建一个测试文件是一种约定。 @magom001 单元测试项目应该是一个单独的项目。通常它是一个链接(或内联)boost.test 库的常规可执行项目。 @VTT 我无法弄清楚如何在 CLion 中执行此操作。我认为他们的文档中缺少一些东西:jetbrains.com/help/clion/boost-test-support.html @magom001 看来clion对单元测试应用没有任何特殊要求。因此,创建单元测试可执行文件应该类似于在 cmake 中创建任何其他可执行文件。以上是关于带有 CLion 的 Boost.TEST:“测试框架意外退出”的主要内容,如果未能解决你的问题,请参考以下文章
Boost.Test 的数据测试用例真的需要 C++11 吗?
C++ 单元测试框架 Boost Test BOOST_AUTO_TEST_CASE
如何在 mingw64 上使用 boost.test 构建测试?