Может быть немного не хватает документации для внутренних компонентов boost :: test, в которой говорится, что все доступно.
Посмотрите на заголовочные файлы boost :: test, особенно на классы test_suite и test_unit.Существует функция traverse_test_tree, которую можно использовать для обхода зарегистрированных тестов.
Ниже приведен код samle, который я написал для вывода результатов теста в определенном формате, он использует 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 );
}
}