如何在VS2013中进行Boost单元测试

对于如何在VS2013中进行Boost单元测试,这方面资料太少。自己也因此走了不少弯路。下文将会阐述一下如何在VS2013中进行Boost单元测试。

  在开始Boost单元测试之前,我们需要先安装VS2013插件Boost Unit Test Adapter (Update 3) 以及编译Boost库。Boost Unit Test Adapte可以在VS2013中的“工具->扩展与更新”中找到并安装。对于Boost Unit Test Adapter所支持的Boost库版本请参考网页。我选择的是版本号为1.55.0的Boost库(可以在其官网下载得到)。在编译Boost库的时候,可以参考教程及博文。我选择的是完全编译(bjam --toolset=msvc-12.0 --build-type=complete)。

  下文以几个步骤来阐述:

  1. 新建解决方案及工程

  接下来,我们新建一个BoostUnitTest解决方案,然后在该方案下添加(鼠标右击解决方案新建项目)两个项目。第一个项目是空的“WIN32”项目“Tested”,另一个是“Boost Unit Test Project”项目(新建项目->模板->Visual C++->Test下)“BoostUnitTest”。如下图:

  2. 在被测试工程中添加文件

  在Tested工程中添加一个头文件tested.h及源文件tested.cpp. 具体代码如下


1 #include <iostream>

2

3 using namespace std;

4

5 class Tested

6 {

7 public:

8

9     Tested();

10     virtual ~Tested();

11     int add(const int a, const int b);

12

13 private:

14

15 };


1 #include "tested.h"

2

3 Tested::Tested()

4 {

5

6 }

7

8 Tested::~Tested()

9 {

10

11 }

12

13 int Tested::add(const int a, const int b)

14 {

15     return a + b;

16 }

  在这里,我们并不需要新建一个main函数对这个类tested进行测试(因为我们已经有单元测试了),但一个程序默认是需要main函数的,所以在需要在Tested项目属性中进行这样的设置(“配置类型”改为“动态库(.dll)”见下图):



接着,“生成”该工程,产生tested.obj文件。

  3. 配置Boost单元测试工程

  新建的Boost单元测试工程中有两个源文件“BoostUnitTestSample.cpp”及“BoostUnitTest.cpp”(还有stdafx.h、stdafx.cpp、targetver.h),前一个文件是样例,可以不要,后一个文件可以当作我们的单元测试源文件。

  先对该工程进行配置:

  4. 进行Boost单元测试

  注:我们在这时只进行简单的单元测试,更加复杂的测试请参考文章最后给出的链接。

  在BoostUnitTest工程中的文件“BoostUnitTest.cpp”(也可新建)添加如下代码:


1 #define BOOST_TEST_MODULE Tested_Module                                // 主测试套件,一个测试项目中只能有一个主测试套件

2

3 #include "stdafx.h"

4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h"    // 待测工程头文件

5

6 struct Tested_Fixture                                                  // 测试夹具

7 {

8     Tested_Fixture()

9     {

10         BOOST_TEST_MESSAGE("setup fixture");

11         tmpTested = new Tested();

12     }

13     ~Tested_Fixture()

14     {

15         BOOST_TEST_MESSAGE("teardown fixture");

16         delete tmpTested;

17     }

18     Tested * tmpTested;

19 };

20

21 BOOST_FIXTURE_TEST_SUITE(Tested_test, Tested_Fixture)                  // 测试套件

22

23 BOOST_AUTO_TEST_CASE( Tested_Method_add_Test)                          // 测试用例

24 {

25      // TODO: Your test code here

26     BOOST_WARN(tmpTested->add(2, 2) == 4);                             // WARN型预言检测

27     BOOST_CHECK(tmpTested->add(2, 2) == 4);                            // CHECK型预言检测

28     BOOST_REQUIRE(tmpTested->add(2, 2) == 4);                          // REQUIRE型预言检测

29 }

30

31 BOOST_AUTO_TEST_SUITE_END()

  点击“生成->生成解决方案”(预先打开“测试->窗口->测试资源管理器”)可以看到在“测试资源管理器”中出现了“BoostUnitTest”这个单元测试用例,如下图:

  注:如果电脑安装有杀毒软件(如360),“生成解决方案”的时候可能会提示:error LNK1104: 无法打开文件“...\BoostUnitTest\Debug\Tested.dll"。这是因为杀毒软件拦截了单元测试工程对被测试工程.dll文件的访问。比较简单的方法是将杀毒软件关闭就OK了。

  点击“全部运行”,可以看到该测试用例变绿,说明测试通过,如下图: 如果我们将“BoostUnitTest.cpp”中的第13行改成:

  BOOST_CHECK(tmpTested->add(2, 2) == 3);

  单元测试运行结果是不通过,如下图:

  至此,如何进行一个简单的Boost单元测试的过程就完成了。

  // 添加于2014.10.18 ---------------------------------------------------------------------------

  现在,我在之前程序的基础上又添加了一点异常测试,相关的源代码如下:


1 #include <iostream>

2

3 using namespace std;

4

5 class Tested

6 {

7 public:

8

9     Tested();

10     virtual ~Tested();

11     int add(const int a, const int b);

12     void testException();

13

14 private:

15

16 };

1 #include "tested.h"

2

3 Tested::Tested()

4 {

5

6 }

7

8 Tested::~Tested()

9 {

10

11 }

12

13 int Tested::add(const int a, const int b)

14 {

15     return a + b;

16 }

17

18 void Tested::testException()

19 {

20     throw logic_error("my throw");    // 抛出一个逻辑错误异常

21 }


1 #define BOOST_TEST_MODULE Tested_Module                                // 主测试套件,一个测试项目中只能有一个主测试套件

2

3 #include "stdafx.h"

4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h"    // 待测工程头文件

5

6 struct Tested_Fixture                                                // 测试夹具

7 {

8     Tested_Fixture()

9     {

10         BOOST_TEST_MESSAGE("setup fixture");

11         tmpTested = new Tested();

12     }

13     ~Tested_Fixture()

14     {

15         BOOST_TEST_MESSAGE("teardown fixture");

16         delete tmpTested;

17     }

18     Tested * tmpTested;

19 };

20

21 BOOST_FIXTURE_TEST_SUITE(Tested_test, Tested_Fixture)                // 测试套件

22

23 BOOST_AUTO_TEST_CASE(Tested_Method_add_Test)                        // 测试用例

24 {

25      // TODO: Your test code here

26     BOOST_WARN(tmpTested->add(2, 2) == 4);                            // WARN型预言检测

27     BOOST_CHECK(tmpTested->add(2, 2) == 4);                            // CHECK型预言检测

28     BOOST_REQUIRE(tmpTested->add(2, 2) == 4);                        // REQUIRE型预言检测

29

30 }

31

32 BOOST_AUTO_TEST_CASE(Tested_Method_testException_Test)                // 测试用例

33 {

34     // TODO: Your test code here

35     BOOST_REQUIRE_NO_THROW(tmpTested->testException());                // 验证是否无异常抛出,是则为真

36     BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error);    // 验证抛出的是否是logic_error异常

37     BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error);    // 验证抛出的是否是runtime_error异常

38

39 }

40

41 BOOST_AUTO_TEST_SUITE_END()

  很显示,程序的运行结果如下:

  35 BOOST_REQUIRE_NO_THROW(tmpTested->testException());              // 测试不通过

  36 BOOST_REQUIRE_THROW(tmpTested->testException(), logic_error);    // 测试通过

  37 BOOST_REQUIRE_THROW(tmpTested->testException(), runtime_error);  // 测试不通过

  如果要进行更复杂的测试,可以参考官方文档。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-21 12:27:04

如何在VS2013中进行Boost单元测试的相关文章

vs2012-这个l两windows程序如何在vs2013中运行

问题描述 这个l两windows程序如何在vs2013中运行 一本老书附带的 刚开始看,运行不了它的程序 怎样可以在vs中运行,我需要学些什么可以搞定它 #include //----------------------------------------------------------------------- // // Name: HelloWorld example project // // Author: Mat Buckland 2002 // // Desc: HelloWo

visual studio-如何在VS2013中实现tab标签的重载,标签能够放在左边,颜色,大小都能调,大神

问题描述 如何在VS2013中实现tab标签的重载,标签能够放在左边,颜色,大小都能调,大神 解决方案 放在左边这个天然就支持,至于颜色.大小,这个需要自己重绘实现了. 解决方案二: http://blog.csdn.net/vincent1941/article/details/6304650http://www.jb51.net/article/68552.htmhttps://technet.microsoft.com/zh-cn/library/ftzc04bf(v=vs.71).asp

如何在Ruby中编写微服务?

[编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采用微服务架构.但是,又有多少相关教程呢?我们来看看这篇关于用Ruby编写微服务的文章吧. 人人都在讨论微服务,但我至今也没见过几篇有关用Ruby编写微服务的.像样的教程.这可能是因为许多Ruby开发人员仍然最喜欢Rails架构(这没什么不好,Rails本身也没什么不好,但是Ruby可以做到的事还有很

我是如何在SQLServer中处理每天四亿三千万记录的

首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. 项目背景 这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了.具体这个项目的情况,我有空再写相关的博文出来. 这个项目是要求做环境监控,我们暂且把受监控的设备称为采集设备,采集设备的属性

如何在Elasticsearch中安装中文分词器(IK+pinyin)

如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. 这是因为使用了Elasticsearch中默认的标准分词器,这个分词器在处理中文的时候会把中文单词切分成一个一个的汉字,因此引入中文的分词器就能解决这个问题. 本篇文章按照下面的内容进行描述: 分词器的作用 安装IK 简单的测试 模拟测试 安装elasticsearch-analysis-piny

vs2013工具栏问题-vs2013 中工具栏为什么没有显示完全?请大侠指点

问题描述 vs2013 中工具栏为什么没有显示完全?请大侠指点 vs2013 中工具栏为什么没有显示完全?请大侠指点 解决方案 是不是工具拦宽度限制了. 解决方案二: 这是第三方的控件么?什么语言的,是不是嵌套在什么控件内了. 解决方案三: 将工具栏拖出来,看看后面有没有东西.如果拖出来之后,后面有东西,那说明工具栏宽度不够. 解决方案四: 工具栏宽度怎么设置?CMFCToolsBar里面好像没有这种方法

qt-如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新

问题描述 如何在QSqlQueryModel中实现增删查改,然后如何与mysql数据库同步更新 本人是个菜鸟在做一个简单的同学录系统,这是进入之后的界面 我想实现鼠标选取一个表格点击"修改同学信息"之后能对它在修改并且修改确定后能同步刷新MySQL数据库而且表格中的数据也更新. 下面是我的代码:#include ""record.h""#include ""ui_record.h""#include &qu

Win7系统如何在excel中添加word文档结构图

  Win7系统如何在excel中添加word文档结构图          方法一: Word提供了一个很方便的功能--文档结构图,通过文档结构图可以在整个文档中快速浏览并追踪特定的文件内容位置.文档结构图是一个独立的窗口,类似于大纲视图,它能够显示文档的标题,单击文档结构图中的标题后,Word就会自动转到文档中的相应标题,并将其显示在窗口的顶部.用户可以单击菜单""视图"-"文档结构图"来打开它.但是EXCEL中没有提供文档结构图,那么如何管理数据量较大

如何在java中实现读取一个txt文档中的随机一行

问题描述 如何在java中实现读取一个txt文档中的随机一行 如题,如何在java中实现读取一个txt文档中的随机一行? 主要就是怎么随机读取 解决方案 根据楼上的说法,来总结一下吧,总体来说,就是将文件全部都读取出来,每一行存储到一个数组或集合中,然后再通过产生随机数,来对这个数组或是 集合进行随机的访问.这样一来就解决了 解决方案二: 文本文件只能顺序读,不能随机读.你的需求只能是读取文本文件每一行到一个arraylist,然后得到下标范围,产生一个随机数,取那一行 解决方案三: http: