65.9K
CodeProject 正在变化。 阅读更多。
Home

Boost 测试库的进度指示器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2013 年 3 月 19 日

CPOL

1分钟阅读

viewsIcon

15488

如何在 Boost 测试应用程序中显示进度。

引言

Boost 测试库可能不是最流行的工具,但它对于编写单元测试非常有用。以下技巧展示了如何在测试运行中添加一些进度指示器。

使用代码

基于 Boost 测试库的简单单元测试代码如下所示:

#include <boost/test/unit_test.hpp>   
 
#define BOOST_TEST_MODULE test_module

BOOST_FIXTURE_TEST_CASE(test_1)
{ 
 
   // calculate value_1 

   value_1=...;

   BOOST_CHECK_EQUAL(value_1, 10);
} 

BOOST_FIXTURE_TEST_CASE(test_2) 
{ 
   // calculate value_2 

  value_2=...;

  BOOST_CHECK_EQUAL(value_2, 10);
}
 

BOOST_FIXTURE_TEST_CASE(test_100)  
{
... 

}

该代码将执行所有列出的子测试,并在检查点失败时打印错误消息。但如果没有发生错误,代码将不会打印任何内容,直到最后。最后,它会打印类似以下内容:

正在运行 100 个测试用例...

*** 未检测到错误。

为了让框架打印进度信息,我们可以使用 --show_progress=true 命令行选项,或者将 BOOST_TEST_SHOW_PROGRESS 环境变量设置为 true

但是,如果我们想强制显示进度指示器和/或 自定义它 (例如,打印点而不是星号,或者以绝对值而不是百分比显示进度),我们可以通过微小的修改来实现:

BOOST_FIXTURE_TEST_CASE 接受第二个参数,即类名。每次子测试开始时都会创建一个类的实例,并在子测试完成后销毁它。为了显示进度,我们只需要一个在析构函数中打印点的类即可。

#include <boost/test/unit_test.hpp>   
#include <iostream>
 
#define BOOST_TEST_MODULE test_module

struct UF
{
    UF(){}
    ~UF()
    { 
        // indicate that the test 
        // was completed
        std::cout<<"."<<std::flush; 
    }
};

BOOST_FIXTURE_TEST_CASE(test_1, UF)
{ 
 
   // calculate value_1 

   value_1=...;

   BOOST_CHECK_EQUAL(value_1, 10);
} 

BOOST_FIXTURE_TEST_CASE(test_2, UF) 
{ 
   // calculate value_2 

  value_2=...;

  BOOST_CHECK_EQUAL(value_2, 10);
}
 

BOOST_FIXTURE_TEST_CASE(test_100, UF)  
{
... 

}

输出将是:

正在运行 100 个测试用例...

..............................................................................................

*** 未检测到错误。

© . All rights reserved.