增强单元测试 - 列出可用的测试

时间:2011-12-18 08:53:41

标签: unit-testing boost boost-test

我编写了一些脚本来自动运行我们的单元测试,使用boost单元测试框架编写。我想添加功能以允许选择和随后运行所有测试的子集。我知道我可以使用run_test参数运行一个测试子集,但我找不到列出已编译二进制文件中所有测试的方法,即我可以传递给run_test的所有参数值。有没有办法提取所有可用的测试,或者我是否必须编写自定义测试运行器?如果是这样,我从哪里开始?

2 个答案:

答案 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版本有命令行参数来获取你需要的东西。