正在努力使Boost库单元测试框架发挥作用

Struggling getting Boost library unit test framework to work

本文关键字:框架 作用 单元测试 努力 Boost      更新时间:2023-10-16

我已经使用VS2013成功构建了Boost库。我还成功地包含并使用了一些Boost.Filesystem和Boost.Log之类的东西。然而,我正在努力让以下单元测试在VisualStudio2013中运行:

#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
class Multiplier {
public:
    explicit Multiplier(int i) : _value{ i } {}
    int multiply(int i) { return _value * i; }
private:
    int _value;
};
BOOST_AUTO_TEST_CASE(everything_test) {
    Multiplier m{ 5 };
    BOOST_CHECK_EQUAL(m.multiply(2), 10);
}

这显然不是一个真正的单元测试,但这不是重点…:)

通过包含boost/test/included/unit_text.hpp,我应该得到一个为我提供的main()函数,而且我似乎是这样,因为我能够解决这个错误。然而,当我运行生成的可执行文件时,我会得到一个Access violation reading location 0x00000000.

我应该运行可执行文件来运行测试吗?如果没有,我该如何运行它们?运行测试似乎是一个简单的操作,从文档中可以明显看出,但我一定错过了它

首先确保您的makefile中有链接信息;示例:

-lboost_system -lboost_log -lboost_signals -lboost_thread -lboost_filesystem -lboost_regex 

当然,只添加特定测试用例套件所需的增强

然后在您的测试套件文件中有以下内容:

#define BOOST_TEST_MODULE YourTestSuiteName                  
#define BOOST_TEST_DYN_LINK                            
#include <boost/test/unit_test.hpp>      
#include <boost/test/results_reporter.hpp>             
#define BOOST_AUTO_TEST_MAIN 
#ifndef NOTESTRESULTFILE                                                           
#ifdef BOOST_AUTO_TEST_MAIN                                                        
std::ofstream out;                                                                 
struct ReportRedirector                                                            
{                                                                                  
    ReportRedirector()                                                             
    {                                                                              
        out.open("test_results.xml");                                              
        assert( out.is_open() );                                                   
        boost::unit_test::results_reporter::set_stream(out);                       
    }                                                                              
};                                                                                 
BOOST_GLOBAL_FIXTURE(ReportRedirector)                                             
#endif                                                                             
#endif   
BOOST_AUTO_TEST_SUITE (YourTestSuiteName)            
BOOST_AUTO_TEST_SUITE_END( )                                            
BOOST_AUTO_TEST_CASE(YourTestCaseName)                                
{                                                                             
   cout<<"BOOST_AUTO_TEST_CASE( YourTestCaseName )n{"<<endl;         
   BOOST_CHECK(false == true);  //TODO: testcase not finished  
   cout<<"}"<<endl;                  
}                                     

这个设置对我来说很好,但我相信你可以用不同的方式设置增强单元测试套件

使用

#include <boost/test/unit_test.hpp>

而不是

#include <boost/test/included/unit_test.hpp>

main在test/unit_test.hpp文件中定义。"included"是一个实现细节。