如何在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)”见下图):
2
5
7 {
20
22
30
  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/
相关文章
|
3月前
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
49 1
|
8天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
3月前
|
JSON Dubbo 测试技术
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
53 2
单元测试问题之增加JCode5插件生成的测试代码的可信度如何解决
|
2月前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
【9月更文挑战第3天】随着软件行业的迅速发展,代码质量和开发效率变得至关重要。本文探讨了Python在自动化及单元测试中的应用,介绍了Selenium、Appium、pytest等自动化测试框架,以及Python标准库中的unittest单元测试框架。通过详细阐述各框架的特点与使用方法,本文旨在帮助开发者掌握编写高效测试用例的技巧,提升代码质量与开发效率。同时,文章还提出了制定测试计划、持续集成与测试等实践建议,助力项目成功。
82 5
|
3月前
|
JSON 测试技术 数据格式
单元测试问题之使用JCode5插件生成测试类如何解决
单元测试问题之使用JCode5插件生成测试类如何解决
117 3
|
3月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
45 2
|
3月前
|
测试技术 C# 开发者
“代码守护者:详解WPF开发中的单元测试策略与实践——从选择测试框架到编写模拟对象,全方位保障你的应用程序质量”
【8月更文挑战第31天】单元测试是确保软件质量的关键实践,尤其在复杂的WPF应用中更为重要。通过为每个小模块编写独立测试用例,可以验证代码的功能正确性并在早期发现错误。本文将介绍如何在WPF项目中引入单元测试,并通过具体示例演示其实施过程。首先选择合适的测试框架如NUnit或xUnit.net,并利用Moq模拟框架隔离外部依赖。接着,通过一个简单的WPF应用程序示例,展示如何模拟`IUserRepository`接口并验证`MainViewModel`加载用户数据的正确性。这有助于确保代码质量和未来的重构与扩展。
73 0
|
3月前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
54 0