unit-testing - boost 单元测试 - 列出可用的测试

标签 unit-testing boost boost-test

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

最佳答案

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 );
    }
}

关于unit-testing - boost 单元测试 - 列出可用的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8550704/

相关文章:

java - 测试 JUnit 和 EclEmma 时遗漏的分支

c++ - 在 Boost Asio 缓冲区中打包结构

c++ - 我可以在编译时判断 Boost.Phoenix lambda 的一组特定输入类型是否有效吗?

c++ - libboost 1.62 错误选项 --log_sink

javascript - 我如何使用 Sinon stub $(window).width() ?

python - 断言两帧不相等

java - 单元测试中的@Autowire 似乎不起作用

c++ - 在 Boost.Python 中沮丧

c++ - BOOST_CHECK_EQUAL(和衍生品)添加自定义消息

c++ - 旧版本的 boost.test 问题