我正在尝试使用 boost 测试库实现单元测试。我首先阅读 boost 站点上的手册。在此之后,我在我已经存在的项目之一中制作了一个简单的测试程序。我面临的唯一问题是我无法看到测试结果。我确信我做错了什么:)但我无法弄清楚。以下是我的项目的详细信息
我为此使用了 Visual Studio8:我有一个名为MyProject.sln的解决方案
与其他项目一起,我有一个名为MyDLL.vcproj的项目(该项目的类型是DLL)
连同 MYDLL proj 中的其他文件,我添加了一个新的 cpp 文件名MyTest.cpp,该文件包含以下代码:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
//#define BOOST_TEST_MODULE MyTestTestModue //no need for this maro if above macro is used
#include <boost/test/unit_test.hpp>
BOOST_AUTO_TEST_CASE(SampleTC)
{
BOOST_CHECK(true);
};
Run Code Online (Sandbox Code Playgroud)
我在 MYDLL 项目属性表中进行了以下更改
C++ -> General -> Additional Include Dependencies = D:\MyProject\Boost\boost\test
Linker -> General -> Additional Libray Directories = D:\MyProject\Boost\lib\win32\Debug
Linker -> System -> SubSystem = (/SUBSYSTEM:CONSOLE)
Run Code Online (Sandbox Code Playgroud)
我阅读了手册中给出的所有编译细节,但仍然无法获得输出。理想情况下,我想将 Boost 测试用作独立库(UTF 的动态库变体)。
我需要初始化一些变量,它们在 BOOST_AUTO_TEST_SUITE 中是“全局的”,因此它们的构造函数将在套件启动时被调用,并且它们的析构函数将在最后一个相应的 BOOST_AUTO_TEST_CASE 完成后被调用
有人知道我该怎么做吗?看起来全局装置不是解决方案......
有没有办法打印在 boost 单元测试中运行的测试的摘要。特别是,能否列出失败的测试?
我很难在输出中找到失败的测试(尤其是当测试有自己的输出时)。我已经设置了 BOOST_TEST_LOG_LEVEL 以显示进入/退出,但这还不足以定位失败的测试。
有没有人知道自动将 boost 测试单元测试转换为 GTest 的工具?许多简单的测试看起来至少可以自动转换,从而节省了大量时间。
正如标题所说,我想从测试应用程序、控制台中的以太或 xml 输出中获取所有测试套件或测试用例(名称)。测试框架是 boost 测试库。
有没有办法实现这一目标?我在文档中没有发现任何有用的东西。
目前,我正在学习单元测试,我想将测试集成到我当前的(10 个 OpenGL 实验文件)项目中。为此,我下载了 Boost.Test,虽然我可以弄清楚它在单个文件样本上的工作原理,但我不知道如何将它集成到我的项目中(我想使用静态链接版本)。
测试与应用程序本身不同的二进制文件吗?(如果它是一个二进制文件,如何运行它?)我应该为每个测试类创建一个测试文件吗?我的 CMakeLists 应该改变多少来反映这种集成?是否可以将测试与应用程序分离,以便我可以在没有安装 boost 的平台上构建我的应用程序?
我知道我有很多问题,但简单地说:Boost.Test 在现实生活中是如何使用的?
我有简单的提升单元测试片段:
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MAIN
#define BOOST_TEST_MODULE MyTest
#include <boost/test/unit_test.hpp>
int add(int i, int j) {
return i + j;
}
BOOST_AUTO_TEST_CASE(my_test) {
}
Run Code Online (Sandbox Code Playgroud)
但是通过使用以下命令编译:
g++ main.cpp --std=c++14 -lboost_unit_test_framework
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/tmp/ccHOUqfd.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x4ae): undefined reference to `boost::unit_test::ut_detail::auto_test_unit_registrar::auto_test_unit_registrar(boost::unit_test::test_case*, boost::unit_test::decorator::collector&, unsigned long)'
/tmp/ccHOUqfd.o: In function `boost::unit_test::make_test_case(boost::function<void ()> const&, boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long)':
main.cpp:(.text._ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m[_ZN5boost9unit_test14make_test_caseERKNS_8functionIFvvEEENS0_13basic_cstringIKcEES8_m]+0xa7): undefined reference to `boost::unit_test::test_case::test_case(boost::unit_test::basic_cstring<char const>, boost::unit_test::basic_cstring<char const>, unsigned long, boost::function<void ()> const&)'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我尝试使用仅标头版本进行编译并且它可以工作 - 通过将 boost 单元测试更改为: …
我正在 Visual Studio 2019 中开发 CMake 项目,我想boost::test使用 Visual Studio 测试资源管理器执行单元测试。
我有以下内容CMakeLists.txt为某些代码定义了一个 boost 单元测试项目:
cmake_minimum_required (VERSION 3.10.0)
include(CTest)
enable_testing()
project (datatest)
message (STATUS "Building project ${PROJECT_NAME}")
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TEST_OUTPUT_DIRECTORY})
set (Boost_USE_STATIC_LIBS ON)
set (Boost_USE_MULTITHREADED ON)
unset (Boost_INCLUDE_DIR CACHE)
unset (Boost_LIBRARY_DIRS CACHE)
set (CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH})
find_package (Boost COMPONENTS unit_test_framework log system REQUIRED)
include_directories (${CMAKE_SOURCE_DIR}/src ${Boost_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR})
set (TEST_SRC
stdafx.cpp
IconTest.cpp
AttitudeTest.cpp
LLAtest.cpp
Model3DTest.cpp
PlayerTest.cpp
TimeDateTest.cpp
)
add_executable (${PROJECT_NAME} ${TEST_SRC})
# Creating a function for easily adding tests
# …Run Code Online (Sandbox Code Playgroud) unit-testing cmake boost-test visual-studio visual-studio-2019
我使用 boost.test 进行单元测试(目前使用 boost 1.71.0)。我有一个模板类,我想用数据集进行测试。
我只能找到测试不同模板参数(使用BOOST_AUTO_TEST_CASE_TEMPLATE)或数据集(使用BOOST_DATA_TEST_CASE)的方法。但我找不到混合模板和数据集的方法。
这是我所取得的成就的 MWE,并评论了我正在尝试做的事情。
test.cpp:
#define BOOST_TEST_MODULE data_template
#include <boost/mpl/list.hpp>
#include <boost/test/data/test_case.hpp>
#include <boost/test/unit_test.hpp>
#include <vector>
#include <list>
#include <numeric> // std::accumulate
template <typename C>
struct Testee{
C container;
typename C::value_type f(){
// just a dummy function to be tested
return std::accumulate(container.begin(),container.end(),0);
}
};
typedef boost::mpl::list<std::vector<double>, std::list<double>, std::vector<size_t>> container_types;
template <class T> void test_containers(size_t size)
{
Testee<T> t;
t.container = T(size,1);
BOOST_CHECK_EQUAL(t.f(), size);
}
// test on all container types but …Run Code Online (Sandbox Code Playgroud) boost-test ×10
c++ ×7
boost ×5
unit-testing ×5
cmake ×1
fixture ×1
googletest ×1
linker ×1
structure ×1
suite ×1