VC2010 + TFS2010 结合 Boost.Test 库进行自动化构建及自动化测试
2011-09-27 17:19
656 查看
最近做了一个实验,结合 VC2010 + TFS2010 + Boost.Test 建立自动化构建和自动化测试。实验成功实现了目标。下面简述一下整个过程。
前提是已经建立了 TFS2010 构建系统,VC2010 已经设置好引入 Boost 库的配置。
首先,需要建立测试的目标模块(TDDSample.Library)、 C++ 测试项目(TDDSample.Test)和用 Boost.Test 库构建的测试程序(TDDSample):
1、新建项目,项目名称:TDDSample,解决方案名称:TDDSample,选择“Visual C++”下的“Win32”下的"Win32 控制台应用程序",其他默认即可。如下图:
2、在解决方案 TDDSample 下新建项目,项目名称:TDDSample.Library,选择“Visual C++”下的“Win32”下的"Win32 项目",选择“静态库”,其他默认即可。如下图:
3、在解决方案 TDDSample 下新建项目,项目名称:TDDSample.Test,选择“Visual C++”下的“测试”下的"测试项目",其他默认即可。
4、把项目 TDDSample.Test 下的文件 UnitTest1.cpp 重命名为 TargetTest.cpp,类 UnitTest1 重命名为 TargetTest 。如下图:
5、设置项目依赖项如下:TDDSample.Test 依赖 TDDSample 和 TDDSample.Library,TDDSample 依赖 TDDSample.Library。如下图:
6、编译成功并签入 TFS2010 中。
然后,建立测试目标代码:
1、在项目 TDDSample.Library 下新建类,类名:Target,选择“Visual C++”下的“C++”下的"C++ 类",选择“内联”,其他默认即可。如下图:
2、在文件 Target.h 中,把代码改为如下:
然后,建立 Boost.Test 测试项目的测试代码:
1、在项目 TDDSample 下的文件 TDDSample.cpp 中,把代码改为如下:
2、在项目 TDDSample 下新建文件,文件名:TargetTest.cpp,选择“Visual C++”下的“代码”下的"C++ 文件(.cpp)"。代码如下:
3、设置项目 TDDSample 属性,首先选择“所有配置”,然后选择“配置属性”下的“C/C++”下的“代码生成”下的“启用 C++ 异常”下的“是,但有 SEH 异常 (/EHa)”。如下图:
4、继续设置属性,选择“配置属性”下的“生成事件"下的“后期生成事件”下的“命令行”,输入如下命令行:
该步骤可以使 Boost.Test 项目编译后立即执行测试,并可以在输出中显示测试结果,并且可以利用 Visual Studio IDE 定位到出错的地方。如下图:
5、确定退出设置属性,以应用上面 3、4 步的设置。
6、编译成功并签入 TFS2010 中。
然后,建立 C++ 测试项目的测试代码:
1、在项目 TDDSample.Test 下的文件 TargetTest.cpp 中的如下代码:
改为:
添加如下 #include 及 using 代码:
2、设置项目 TDDSample.Test 属性,首先选择“所有配置”,然后选择“配置属性”下的“常规”下的“公共语言运行时支持”下的“公共语言运行时支持(/clr)”。如下图:
3、编译成功并执行测试,选择菜单"测试"下的“运行”下的“解决方案中的所有测试”,测试全部通过。如下图:
然后,建立自动构建和自动测试:
1、首先需要启动”Team Foundation 生成通知“,选择”开始“菜单下的”所有程序“下的”Microsoft Visual Studio 2010“下的”Team Foundation Server Tools“下的”生成通知“。如下图:
2、选择菜单"视图"下的“团队资源管理器”,选择团队项目下的“生成”,并点击右键,选择”新建生成定义“,默认生成定义名称:TDDSample。如下图:
3、选择”触发器“下的”封闭签入 - 仅在成功合并和生成所提交的变更后接受签入“。如下图:
4、选择”工作区“下的”源代码管理文件夹“,设置为解决方案的根目录,类似”$/Sample/TDDSample“。如下图:
5、选择”生成默认值“,设置”将生成输出复制到以下放置文件夹“为 TFS 服务器配置的输出路径,类似”\\TFSServer\PublishProgram\Sample“。如下图:
6、”过程“和”保留策略“可以保持默认设置。
7、保存设置,并签入全部代码变更。此时将显示”封闭签入“对话框,点击”生成更改“即可。如下图:
8、过一段时间后,”生成通知“会收到 TFS 服务器返回的生成及测试结果并显示”封闭签入“结果对话框,点击”协调“即可。如下图:
最后,如果要测试失败的签入,可以修改代码中标记”模拟错误“处的代码,启用注释掉的代码即可。
前提是已经建立了 TFS2010 构建系统,VC2010 已经设置好引入 Boost 库的配置。
首先,需要建立测试的目标模块(TDDSample.Library)、 C++ 测试项目(TDDSample.Test)和用 Boost.Test 库构建的测试程序(TDDSample):
1、新建项目,项目名称:TDDSample,解决方案名称:TDDSample,选择“Visual C++”下的“Win32”下的"Win32 控制台应用程序",其他默认即可。如下图:
2、在解决方案 TDDSample 下新建项目,项目名称:TDDSample.Library,选择“Visual C++”下的“Win32”下的"Win32 项目",选择“静态库”,其他默认即可。如下图:
3、在解决方案 TDDSample 下新建项目,项目名称:TDDSample.Test,选择“Visual C++”下的“测试”下的"测试项目",其他默认即可。
4、把项目 TDDSample.Test 下的文件 UnitTest1.cpp 重命名为 TargetTest.cpp,类 UnitTest1 重命名为 TargetTest 。如下图:
5、设置项目依赖项如下:TDDSample.Test 依赖 TDDSample 和 TDDSample.Library,TDDSample 依赖 TDDSample.Library。如下图:
6、编译成功并签入 TFS2010 中。
然后,建立测试目标代码:
1、在项目 TDDSample.Library 下新建类,类名:Target,选择“Visual C++”下的“C++”下的"C++ 类",选择“内联”,其他默认即可。如下图:
2、在文件 Target.h 中,把代码改为如下:
#pragma once #ifndef _TARGET_H_ #define _TARGET_H_ namespace Sunrise { namespace TDDSample { namespace Library { template<typename T> T Add(T const& a, T const& b) { return a + b; } template<typename T> class Target { public: Target(void) { } ~Target(void) { } T Add(T const& a, T const& b) { return Library::Add(a, b); } }; }}} // namespace Sunrise::TDDSample::Library #endif
然后,建立 Boost.Test 测试项目的测试代码:
1、在项目 TDDSample 下的文件 TDDSample.cpp 中,把代码改为如下:
// TDDSample.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #define BOOST_TEST_MAIN #include <boost/test/included/unit_test.hpp> namespace Sunrise { namespace TDDSample { using namespace std; struct GlobalFixture { GlobalFixture() { cout << "开始测试..." << endl; } ~GlobalFixture() { cout << "测试结束!" << endl; //system("pause"); } }; BOOST_GLOBAL_FIXTURE(GlobalFixture) }} // namespace Sunrise::TDDSample
2、在项目 TDDSample 下新建文件,文件名:TargetTest.cpp,选择“Visual C++”下的“代码”下的"C++ 文件(.cpp)"。代码如下:
#include "StdAfx.h" #include <iostream> #define BOOST_TEST_INCLUDED #include <boost/test/unit_test.hpp> #include <boost/mpl/list.hpp> #include "../TDDSample.Library/Target.h" namespace Sunrise { namespace TDDSample { using namespace std; using namespace boost; //using namespace boost::unit_test; using namespace Sunrise::TDDSample::Library; struct TargetFixture { TargetFixture() { cout << "Target 开始测试..." << endl; } ~TargetFixture() { cout << "Target 测试结束!" << endl; } }; BOOST_FIXTURE_TEST_SUITE(s_Target, TargetFixture) BOOST_AUTO_TEST_CASE(t_GlobalAdd) { BOOST_CHECK_EQUAL(3, Add(1, 2)); } BOOST_AUTO_TEST_CASE(t_ErrorAdd) { // 模拟错误 //BOOST_CHECK_EQUAL(0, Add(1, 2)); } typedef mpl::list<short, int, long, double> Types; BOOST_AUTO_TEST_CASE_TEMPLATE(t_TargetAdd, T, Types) { Target<T> target; BOOST_CHECK_EQUAL(static_cast<T>(3.0), target.Add(1, 2)); } BOOST_AUTO_TEST_SUITE_END() }} // namespace Sunrise::TDDSample
3、设置项目 TDDSample 属性,首先选择“所有配置”,然后选择“配置属性”下的“C/C++”下的“代码生成”下的“启用 C++ 异常”下的“是,但有 SEH 异常 (/EHa)”。如下图:
4、继续设置属性,选择“配置属性”下的“生成事件"下的“后期生成事件”下的“命令行”,输入如下命令行:
"$(TargetPath)" --result_code=no --report_level=no
该步骤可以使 Boost.Test 项目编译后立即执行测试,并可以在输出中显示测试结果,并且可以利用 Visual Studio IDE 定位到出错的地方。如下图:
5、确定退出设置属性,以应用上面 3、4 步的设置。
6、编译成功并签入 TFS2010 中。
然后,建立 C++ 测试项目的测试代码:
1、在项目 TDDSample.Test 下的文件 TargetTest.cpp 中的如下代码:
[TestMethod] void TestMethod1() { // // TODO: 在此处添加测试逻辑 // };
改为:
[TestMethod] void TestGlobalAdd() { Assert::AreEqual(3, Add(1, 2)); }; [TestMethod] void TestError() { // 模拟错误 //Assert::AreEqual(0, Add(1, 2)); }; [TestMethod] void TestTargetAdd() { Target<double> target; Assert::AreEqual(3.0, target.Add(1, 2)); }; [TestMethod] void BoostTest() { // 调用 Boost.Test 项目,并检查返回值,非 0 值为失败 // 测试代码既可以在 C++ 测试项目中编写,也可以在 Boost.Test 项目中编写 // 同时可以结合 TFS 的自动化测试 String^ currentPath = AppDomain::CurrentDomain->BaseDirectory; String^ fileName = currentPath + "\\TDDSample.exe"; ProcessStartInfo^ testProcessStartInfo = gcnew ProcessStartInfo(fileName); testProcessStartInfo->UseShellExecute = false; testProcessStartInfo->RedirectStandardOutput = true; Process^ testProcess = Process::Start(testProcessStartInfo); StreamReader^ testStreamReader = testProcess->StandardOutput; testProcess->WaitForExit(); Console::Write(testStreamReader->ReadToEnd()); Assert::AreEqual(0, testProcess->ExitCode); };
添加如下 #include 及 using 代码:
#include "../TDDSample.Library/Target.h" using namespace System::IO; using namespace System::Diagnostics; using namespace Sunrise::TDDSample::Library;
2、设置项目 TDDSample.Test 属性,首先选择“所有配置”,然后选择“配置属性”下的“常规”下的“公共语言运行时支持”下的“公共语言运行时支持(/clr)”。如下图:
3、编译成功并执行测试,选择菜单"测试"下的“运行”下的“解决方案中的所有测试”,测试全部通过。如下图:
然后,建立自动构建和自动测试:
1、首先需要启动”Team Foundation 生成通知“,选择”开始“菜单下的”所有程序“下的”Microsoft Visual Studio 2010“下的”Team Foundation Server Tools“下的”生成通知“。如下图:
2、选择菜单"视图"下的“团队资源管理器”,选择团队项目下的“生成”,并点击右键,选择”新建生成定义“,默认生成定义名称:TDDSample。如下图:
3、选择”触发器“下的”封闭签入 - 仅在成功合并和生成所提交的变更后接受签入“。如下图:
4、选择”工作区“下的”源代码管理文件夹“,设置为解决方案的根目录,类似”$/Sample/TDDSample“。如下图:
5、选择”生成默认值“,设置”将生成输出复制到以下放置文件夹“为 TFS 服务器配置的输出路径,类似”\\TFSServer\PublishProgram\Sample“。如下图:
6、”过程“和”保留策略“可以保持默认设置。
7、保存设置,并签入全部代码变更。此时将显示”封闭签入“对话框,点击”生成更改“即可。如下图:
8、过一段时间后,”生成通知“会收到 TFS 服务器返回的生成及测试结果并显示”封闭签入“结果对话框,点击”协调“即可。如下图:
最后,如果要测试失败的签入,可以修改代码中标记”模拟错误“处的代码,启用注释掉的代码即可。
相关文章推荐
- 如何使用Coded UI Test对Webpage进行自动化测试
- android jUnit test 进行自动化测试
- Coded UI Test对Webpage进行自动化测试
- maven中使用spring的test包结合junit4进行测试。
- 使用Windows Mobile Test Framework进行Windows Mobile程序的自动化测试
- Selenium入门之结合Junit进行自动化测试
- appium2-基于python调用unittest框架对iOS进行自动化测试
- 如何使用Coded UI Test对Webpage进行自动化测试
- Jenkins参数化构建进行自动化测试
- MSDN Webcast 预告:使用Windows Mobile Test Framework进行自动化测试
- android jUnit test 进行自动化测试
- 在使用Microsoft Visual Studio Test Controller 2010进行测试时,报如下错误: System.DllNotFoundException: 无法加载 DLL“Microsoft.VisualStudio.QualityTools.RecorderBarBHO100.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
- MSDN Webcast - 使用Windows Mobile Test Framework进行自动化测试(Level 300)
- testlink+jenkins完成自动化测试平台构建
- teamcity和jmeter结合进行接口自动化测试
- 用Jmeter进行接口自动化测试工作流程
- Python UnitTest 框架执行功能自动化测试
- 使用 Gradle 实现 TFS 构建自动化
- 目前大家对Python都有一个共识,就是他对测试非常有用,自动化测试里Python用途也很广,但是Python到底怎么进行自动化测试呢?今天就简单的向大家介绍一下怎么使用Python进行自动化测试
- VS2012 Unit Test —— 我对IdleTest库动的大手术以及对Xml相关操作进行测试的方式