了解 Boost 单元测试框架

发表于:2013-9-02 11:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:nodeathphoenix    来源:51Testing软件测试网采编

  BOOST_AUTO_TEST_SUITE 和 BOOST_AUTO_TEST_SUITE_END 宏分别表示测试套件的开头和结尾。各个测试放在这两个宏之间,从这一点来看,这些宏的语义很像 C++ 名称空间。每个单元测试用 BOOST_AUTO_TEST_CASE 宏来定义。清单 3 给出了 清单 2 中代码的输出。

  清单 3. 清单 2 中代码的输出

[arpan@tintin] ./a.out
Running 2 test cases...
test.cpp(10): error in "test1": check s.size() == 0 failed
*** 1 failure detected in test suite "stringtest"

  下面详细讨论如何创建前面清单中的单元测试。基本思想是使用 Boost 提供的宏来测试各个类特性。BOOST_CHECK 和 BOOST_REQUIRE_EQUAL 是 Boost 提供的预定义宏(也称为测试工具),用于验证代码输出。

  Boost 测试工具

  Boost 有一整套测试工具,基本上可以说它们是用于验证表达式的宏。测试工具的三个主要类别是 BOOST_WARN、BOOST_CHECK 和 BOOST_REQUIRE。BOOST_CHECK 和 BOOST_REQUIRE 之间的差异在于:对于前者,即使断言失败,测试仍然继续执行;而对于后者,认为这是严重的错误,测试会停止。清单 4 使用一个简单的 C++ 片段展示了这些工具类别之间的差异。

  清单 4. 使用 Boost 测试工具的三个变体

#define BOOST_TEST_MODULE enumtest
#include <boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_SUITE (enum-test)
BOOST_AUTO_TEST_CASE (test1)
{
typedef enum {red = 8, blue, green = 1, yellow, black } color;
color c = green;
BOOST_WARN(sizeof(green) > sizeof(char));
BOOST_CHECK(c == 2);
BOOST_REQUIRE(yellow > red);
BOOST_CHECK(black != 4);
}
BOOST_AUTO_TEST_SUITE_END( )

  第一个 BOOST_CHECK 会失败,第一个 BOOST_REQUIRE 也是如此。但是,当 BOOST_REQUIRE 失败时,代码退出,所以不会到达第二个 BOOST_CHECK。清单 5 显示了 清单 4 中代码的输出。

  清单 5. 理解 BOOST_REQUIRE 和 BOOST_CHECK 之间的差异

[arpan@tintin] ./a.out
Running 1 test case...
e2.cpp(11): error in "test1": check c == 2 failed
e2.cpp(12): fatal error in "test1": critical check yellow > red failed
*** 2 failures detected in test suite "enumtest"

  同样,如果需要针对特定情况检查某些函数或类方法,最容易的方法是创建一个新测试,并使用参数和期望值调用这个例程。清单 6 提供了一个示例。

  清单 6. 使用 Boost 测试检查函数和类方法

BOOST_AUTO_TEST(functionTest1)
{
BOOST_REQUIRE(myfunc1(99, ‘A’, 6.2) == 12);
myClass o1(“hello world!/n”);
BOOST_REQUIRE(o1.memoryNeeded( ) < 16);
}

52/5<12345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号