我编写了一些脚本来自动运行我们的单元测试,使用boost单元测试框架编写。我想添加功能以允许选择和随后运行所有测试的子集。我知道我可以使用run_test参数运行一个测试子集,但我找不到列出已编译二进制文件中所有测试的方法,即我可以传递给run_test的所有参数值。有没有办法提取所有可用的测试,或者我是否必须编写自定义测试运行器?如果是这样,我从哪里开始?
答案 0 :(得分:4)
boost :: test内部的文档可能有点缺乏,表示一切都可用。
查看boost :: test头文件,特别是test_suite和test_unit类。有一个名为traverse_test_tree的函数可用于遍历已注册的测试。
下面是我编写的以特定格式输出测试结果的一些代码,它使用traverse_test_tree输出每个测试的结果,希望它会给你一个良好的开端....
/**
* Boost test output formatter to output test results in a format that
* mimics cpp unit.
*/
class CppUnitOpFormatter : public boost::unit_test::output::plain_report_formatter
{
public:
/**
* Overidden to provide output that is compatible with cpp unit.
*
* \param tu the top level test unit.
* \param ostr the output stream
*/
virtual void do_confirmation_report( boost::unit_test::test_unit const& tu,
std::ostream& ostr );
};
class CppUnitSuiteVisitor : public test_tree_visitor
{
public:
explicit CppUnitSuiteVisitor( const string& name ) : name_( name )
{}
virtual void visit( const test_case& tu )
{
const test_results& tr = results_collector.results( tu.p_id );
cout << name_ << "::" << tu.p_name << " : " << ( tr.passed() ? "OK\n" : "FAIL\n" );
}
private:
string name_;
};
// ---------------------------------------------------------------------------|
void CppUnitOpFormatter::do_confirmation_report(
test_unit const& tu, std::ostream& ostr )
{
using boost::unit_test::output::plain_report_formatter;
CppUnitSuiteVisitor visitor( tu.p_name );
traverse_test_tree( tu, visitor );
const test_results& tr = results_collector.results( tu.p_id );
if( tr.passed() )
{
ostr << "Test Passed\n";
}
else
{
plain_report_formatter::do_confirmation_report( tu, ostr );
}
}
答案 1 :(得分:2)
Boost.Test的Trunk版本有命令行参数来获取你需要的东西。