我使用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.
我应该运行可执行文件来运行测试吗?如果没有,我该如何运行它们?运行测试看起来就像是一个简单的操作,从文档中可以明显看出,但我必须错过它。
答案 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;
}
这个设置对我来说很好,但我相信你可以用不同的方式设置升压单元测试套件