如何在VS2013中进行Boostvs2013创建单元测试试

关注51Testing
VS2013单元测试(使用VS2013自带的单元测试)
发表于: 11:08 &作者:钱智慧 & 来源:51Testing软件测试网采编
推荐标签:
  1、打开VS3013,随便建一个解决方案,比如叫:LearnUnitTest,建一个类库项目LearnUnitTest_Bank,该项目中添加一个BankAccount类,这个类及类中的方法就是我们要的对象。  2、给LearnUnitTest添加一个测试项目:在解决方案名称上右键=》添加=》新建项目=》VisualC#=》测试=》项目,项目名称叫LearnUnitTest_BankTest,将LearnUnitTest_Bank添加为LearnUnitTest_BankTest的引用项目,将测试项目LearnUnitTest_BankTest里默认生成的类重命名为BankAccountTest。  对于BankAccountTest类,类上有注解TestClass,方法上有注解TestMethod。可以在这类文件里添加其他类和方法,供测试方法使用。  首个测试:  3、现在我们测试BankAccount类的Debit方法,我们预先确定此次测试要检查如下方面:  a、如果信用余额(credit amount)比账户余额大,该方法就抛异常ArgumentOutOfRangeException  b、如果信用余额小于0也抛异常  c、如果a和b都满足,该方法会从账户余额里减去amount(函数参数)  注意:由a、b、c可以看邮BankAccount类中的Debit方法最后一行应该是-=,而不是+=——当然了,这个是故意留下的bug,而不是的失误,就等着在这次测试中把它测出来,然后修正掉。  在测试类里添加如下方法测试Debit方法:// unit
code[TestMethod]public void Debit_WithValidAmount_UpdatesBalance(){// arrangedouble beginningBalance = 11.99;double debitAmount = 4.55;double expected = 7.44;BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);// actaccount.Debit(debitAmount);// assertdouble actual = account.BAssert.AreEqual(expected, actual, 0.001, "Account not debited correctly");}  测试方法的要求:  必须要有TestMethod注解,返回类型为void,不能有参数。  经过测试,我们发现了bug,把+=改为-=即可。  使用单元测试改善代码:  依然是测试Debit,本次测试想完成以下意图:  a、如果credit amount(指的应该就是debit amount)比balance大,方法就抛ArgumentOutOfRangeException  b、如果credit amount比0小,也抛ArgumentOutOfRangeException异常  (1)创建测试方法  首次尝试创建一个测试方法来处理上述问题:  代码://unit test method[TestMethod][ExpectedException(typeof(ArgumentOutOfRangeException))]public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange(){// arrangedouble beginningBalance = 11.99;double debitAmount = -100.00;BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);// actaccount.Debit(debitAmount);// assert is handled by ExpectedException}  注意这个方法:Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange,意思是:当debit amount小于0时,本次测试应该会导致被测试的方法抛出ArgumentOutOfRange异常,否则本次测试就失败了,没有达到期望,需要修改Debit代码以达成本次测试期望——正所谓TDD开发。  我们使用了ExpectedExceptionAttribute特性来断言期望的异常应当被抛出。除非方法抛出ArgumentOutOfRangeException异常,否则该特性就会导致测试失败(要注意本次测试的意图)。用正的和负的debitAmount运行这个测试,然后临时把被测试的方法(Debit方法)修改一下:当demit amount小于0时抛出一个ApplicatinException。捣腾完这些,发现本次测试基本没什么问题。  为了测试debit amount 大于balance的情形,我们做下面几个操作:  a、创建一个新的测试方法名叫    Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange  b、从上一个测试方法  Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange  复制方法体到本测试方法  c、把debitAmount设置为一个比balance大的值  (2)运行测试方法  用不同的debitAmount值运行Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange  和 Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange  然后运行三个测试,这样我们最开始设定的三个cases都被覆盖了。
官方活动:
搜索风云榜
51Testing官方微信
51Testing官方微博
测试知识全知道对于如何在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&
5 class Tested
virtual ~Tested();
int add(const int a, const int b);
13 private:
1 #include "tested.h"
3 Tested::Tested()
8 Tested::~Tested()
13 int Tested::add(const int a, const int b)
return a +
在这里,我们并不需要新建一个main函数对这个类tested进行测试(因为我们已经有单元测试了),但一个程序默认是需要main函数的,所以在需要在Tested项目属性中进行这样的设置(“配置类型”改为“动态库(.dll)”见下图):
接着,“生成”该工程,产生tested.obj文件。
3. 配置Boost单元测试工程
新建的Boost单元测试工程中有两个源文件“BoostUnitTestSample.cpp”及“BoostUnitTest.cpp”(还有stdafx.h、stdafx.cpp、targetver.h),前一个文件是样例,可以不要,后一个文件可以当作我们的单元测试源文件。
先对该工程进行配置:
1)添加“平台工具集”为”Visual Studio 2013 (v120)”,见下图:
2)添加包含Boost库的根目录(在我电脑上是D:\boots_1_55_0),见下图:
3)添加Boost库目录及待测试工程的.obj文件所在目录,见下图:
4)添加“附加依赖项”“tested.obj”,见下图:
4. 进行Boost单元测试
注:我们在这时只进行简单的单元测试,更加复杂的测试请参考文章最后给出的链接。
在BoostUnitTest工程中的文件“BoostUnitTest.cpp”(也可新建)添加如下代码:
1 #define BOOST_TEST_MODULE Example                         // 主测试套件,一个测试项目中只能有一个主测试套件
3 #include "stdafx.h"
4 #include "D:\VSProject\BoostUnitTest\BoostUnitTest\Tested\tested.h"    // 待测工程头文件
6 BOOST_AUTO_TEST_SUITE(Tested_test)                        // 测试套件
8 BOOST_AUTO_TEST_CASE( BoostUnitTest )                      // 测试用例
// TODO: Your test code here
Tested tmpT
BOOST_WARN(tmpTested.add(2, 2) == 4);                    // WARN型预言检测
BOOST_CHECK(tmpTested.add(2, 2) == 4);                   // CHECK型预言检测
BOOST_REQUIRE(tmpTested.add(2, 2) == 4);                  // REQUIRE型预言检测
17 BOOST_AUTO_TEST_SUITE_END()
点击“生成-&生成解决方案”(预先打开“测试-&窗口-&测试资源管理器”)可以看到在“测试资源管理器”中出现了“BoostUnitTest”这个单元测试用例,如下图:
点击“全部运行”,可以看到该测试用例变绿,说明测试通过,如下图:
如果我们将“BoostUnitTest.cpp”中的第13行改成:
BOOST_CHECK(tmpTested.add(2, 2) == 3);
单元测试运行结果是不通过,如下图:
至此,如何进行一个简单的Boost单元测试的过程就完成了。如果要进行更复杂的测试,可以参考。
在文章中找不到问题答案?您还可以
热门栏目订阅C++单元测试和代码覆盖率_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++单元测试和代码覆盖率
上传于||文档简介
&&在VS2012下的 C++单元测试和代码覆盖率
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩20页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 boost单元测试 的文章

 

随机推荐