苦苦挣扎让Boost库单元测试框架起作用

时间:2014-04-07 19:00:15

标签: c++ unit-testing boost visual-studio-2013

我使用VS2013成功构建了Boost库。我还成功地包含并使用了一些Boost.Filesystem和Boost.Log的东西。但是,我正努力让以下单元测试在Visual Studio 2013中运行:

#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.

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

2 个答案:

答案 0 :(得分:1)

使用

#include <boost/test/unit_test.hpp>

而不是

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

main在test / unit_test.hpp文件中定义。 &#34;包含&#34;是一个实现细节。

答案 1 :(得分:1)

首先确保你的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;                  
}                                     

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