VS2010 单元测试入门

合集下载

VS2010 测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(上)

VS2010 测试功能之旅:编码的UI测试(4)-通过编写测试代码的方式建立UI测试(上)

VS2010 测试功能之旅:编码的UI 测试(4)-通过编写测试代码的方式建立UI测试(上)回顾在之前的入门篇系列中,分别介绍了一个简单的示例, 操作动作的录制原理,通过修改UIMap.UItest文件控制操作动作代码的生成,对象的识别原理。

接下来正式进入我们UI测试的进阶篇,在这一章,将讲述如何初步通过自己编写代码的方式来建立UI测试。

示例程序一个系统的基本功能是增,删,改,查,其中增和改界面基本一样,删就几乎是一个按钮的事,所以我做了一个程序示例(下载点我),拥有增和查两个功能,之后的操作都将会在这个示例之上进行:系统主窗口:该系统拥有两个功能,“添加用户”和“查询用户”,点击添加用户后,进入添加用户子窗体:这里添加用户的时候根据情况会出现以下几个提示框:“用户名不能为空”“已有重名用户”“备注不能为空”“添加成功!”如果在之前的主窗口,点击查询用户,则进入查询用户子窗体。

注:系统默认自带了5个用户TestUser1, TestUser2, TestUser3, TestUser4, TestUser5。

这个窗体不会弹任何提示框,默认进入窗体时,DataGridView里面没有加载数据,现在进行一个说明:查询条件-用户名:表示是否按用户名查询(非模糊查询),如果不输入,默认为不按其查询。

查询条件-用户类型:有三个选项“所有”,“管理员”,“一般用户”。

查询条件-日期:表示是否按日期查询,如果勾上了日期CheckBox,则旁边的DateTimePicker 会启用,然后选择一个具体的日期。

按钮-查询:就会按以上条件查询。

按钮-重置:用户名清空,用户类型变成所有,日期取消勾选。

文本框-用户备注:当查询出数据以后,每选择DataGridView里面中的一行数据,用户备注TextBox会自动加载当前行的用户备注。

接下来要做的工作就很轻松,我们要将以上的检查点转换为代码。

对测试进行编码实际上,很多自动化测试项目在编写的时候都是采用边录制边编写的方法来进行的,比如复杂的操作可以先录制下来,然后手工去改某些步骤,这里我们将采用这种方法。

VS2010MFC编程入门之四(MFC应用程序框架分析)

VS2010MFC编程入门之四(MFC应用程序框架分析)

上一讲鸡啄米讲的是VS2010应用程序工程中文件的组成结构,可能大家对工程的运行原理还是很模糊,理不出头绪,毕竟跟C++编程入门系列中的例程差别太大。

这一节鸡啄米就为大家分析下MFC应用程序框架的运行流程。

一.SDK应用程序与MFC应用程序运行过程的对比程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是WinMain函数,MFC程序也是从WinMain函数开始的。

下面鸡啄米就给出用Windows SDK写的“HelloWorld”程序,与应用程序框架进行对比,这样能更好的了解框架是怎样运行的。

Windows SDK开发程序就是不使用MFC类库,直接用Windows AP I函数进行软件开发。

鸡啄米不是要讲解SDK开发,只是为了对比而简单介绍,至于SDK 开发可以在大家学完MFC以后选择是否要研究,一般来说有简单了解就可以了。

SDK应用程序首先,给出Windows SDK应用程序“HelloWorld”的源码:上面的程序运行的流程是:进入WinMain函数->初始化WNDCLASSEX,调用Regist erClassEx函数注册窗口类->调用ShowWindow和UpdateWindow函数显示并更新窗口->进入消息循环。

关于消息循环再简单说下,Windows应用程序是消息驱动的,系统或用户让应用程序进行某项操作或完成某个任务时会发送消息,进入程序的消息队列,然后消息循环会将消息队列中的消息取出,交予相应的窗口过程处理,此程序的窗口过程函数就是my WndProc函数,窗口过程函数处理完消息就完成了某项操作或任务。

本例是要显示“HELL O WORLD”字符串,UpdateWindow函数会发送WM_PAINT消息,但是此消息不经过消息队列而是直接送到窗口过程处理,在窗口过程函数中最终绘制了“HELLO WORLD”字符串。

MFC应用程序下面是MFC应用程序的运行流程,通过MFC库中代码进行分析:首先在HelloWorld.cpp中定义全局对象theApp:CHelloWorldApp theApp;。

Visual Studio 2010 单元测试使用

Visual Studio 2010 单元测试使用

Visual Studio 2010 单元测试之一---普通单元测试本文以Visual Studio 2010为例,来介绍如何在Visual Studio里面进行单元测试.首先来介绍普通单元测试,这是进行顺序测试、压力测试的基础。

如果在Visual Studio 2010(2008)里面没有发现下图中的Test菜单,请用Visual Studio安装光盘进行安装,因为Visual Studio单元测试插件安装时可能不是默认选项。

测试之前,我们要准备一些测试代码。

或者从下面的链接下载完整的项目工程。

/source/3014236新建一个名为AppSample的Lib。

里面有一个MathUtility文件,包含加减乘除四个方法。

代码如下:namespace TJVictor.UT.AppSample{public class MathUtility{public MathUtility() { }public static int Add(int a, int b){return a + b;}public static int Minus(int a, int b){return a - b;}public static int Divide(int a, int b){return a / b;}public static int Multiply(int a, int b){return a * b;}}}创建单元测试项目有两种方法:1.直接创建单元测试项目:File->New->Project->Test Project. 如下图:2. 直接在需要创建单元测试的函数上创建:右击函数名->Create Unit Tests。

如下图这样就创建好了单元测试项目。

Visual Studio 会自动生成一个单元测试工程。

推荐使用第二种方法创建,因为第一种方法创建的只有单元测试工程,第二种方法会把单元测试函数也一起创建了出来。

VS-C++2010入门教程

VS-C++2010入门教程

第四章VC2010中初学者常见错误、警告和问题这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。

iostream.h与<iostream>下面的代码为什么在VC2010下面编译不过去?#include <iostream.h>int main(){cout<<"Hello World."<<endl;return 0;}错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用<iostream>头文件来代替,你甚至可以认为<iostream>是这样定义的:namespace std{#include "iostream.h"}因此我们可以简单的修改我们的Hello World。

#include <iostream>using namespace std;int main(){cout<<"Hello World."<<endl;return 0;}iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了<iostream>。

而C的头文件stdio.h等依然可以继续使用,这是为了兼容C代码。

但是它们依然有对应的C++版本,如<cstdio> <cstdlib>等。

记住,在VC2010上面采用C++风格的头文件而不是C 风格的头文件,除非你是在用C。

在VS2010中创建并运行单元测试

在VS2010中创建并运行单元测试

演练:在VS2010中创建并运行单元测试摘自MSDN,略作整理目录概述 (1)系统必备 (2)演练 (3)准备演练 (3)创建单元测试 (4)创建单元测试 (4)运行和自定义单元测试 (5)运行和自定义单元测试 (5)运行单元测试并修复代码 (6)运行单元测试并修复代码 (6)为私有方法创建和运行单元测试 (6)为私有方法创建和运行单元测试 (6)运行测试并查看代码覆盖率 (7)运行测试并查看代码覆盖率 (7)概述本演练将逐步指导您使用Microsoft Visual Studio 2010 来创建、运行和自定义一系列测试。

您将从正处于开发过程中的C# 项目开始,创建执行该项目代码的测试,运行测试并检查结果。

然后,可以更改项目代码并重新运行测试。

在本演练中,您将完成以下任务:∙准备一个要在演练中使用的“银行帐户”(Woodgrove Bank)项目。

∙打开一个现有项目。

∙为公共和私有方法创建单元测试。

∙对代码运行这些测试。

∙在测试中查找错误并进行更正。

∙在代码中查找错误并进行更正。

系统必备Woodgrove Bank 项目,由简单程序的代码组成。

然后可以生成测试Woodgrove Bank 程序各种方法(公共和私有方法)的单元测试。

using System;namespace BankAccountNS{/// <summary>/// Bank Account demo class./// </summary>public class BankAccount{ private string m_customerName;private double m_balance;private bool m_frozen = false;private BankAccount() { }public BankAccount(string customerName, double balance){ m_customerName = customerName;m_balance = balance;}public string CustomerName{ get { return m_customerName; }}public double Balance{ get { return m_balance; }}public void Debit(double amount){ if (m_frozen){ throw new Exception("Account frozen");}if (amount > m_balance){ throw new ArgumentOutOfRangeException("amount");}if (amount < 0){ throw new ArgumentOutOfRangeException("amount");}m_balance += amount;}public void Credit(double amount){ if (m_frozen){ throw new Exception("Account frozen");}if (amount < 0){ throw new ArgumentOutOfRangeException("amount");}m_balance += amount;}private void FreezeAccount(){ m_frozen = true;}private void UnfreezeAccount(){ m_frozen = false;}public static void Main(){ BankAccount ba = new BankAccount("Mr.Bryan Walton", 11.99);ba.Credit(5.77);ba.Debit(11.22);Console.WriteLine("Current balance is ${0}", ba.Balance);}}}演练准备演练5.在“名称”框中键入Bank,然后单击“确定”。

vs2010入门

vs2010入门

写在前面在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫《Visual C++ 2005入门经典》的书帮了我不少的忙。

因为通常的C++教材都只会介绍C++的语法什么的,很少会告诉我们如何去编译、运行,告诉我们什么是控制台程序,什么事Win程序,什么是GUI程序,C++能干什么,VC和C++的区别是什么。

现在有很多的朋友应该也有这些问题吧?学C++用C++也有几年了,算不上熟悉,算是初窥门径吧,我想我应该做点什么帮助一下那些和曾经的我一样困惑的朋友,特别是学生朋友,告诉他们他们所困惑的问题的答案。

记得我学C++的时候,没有人教,有的时候也走了不少弯路,甚至连调试也不会,也不知道可以通过看调用堆栈看调用次序,还自己慢慢的去搜索,好傻啊。

接下来我会做一个《Visual C++ 2010入门教程》系列,用来帮助初学者。

刚开始学的时候是很痛苦的,这个我深有体会,特别是身边还没有人能够指导一二的。

内容主要涵盖在Windows下面使用C++进行开发的常见内容,Visual Studio 2010的使用,如何创建新项目,如何调试,如果配置项目属性等等,另外还会介绍Visual C++ 2010中新加如的一些内容,包括一些新的STL组建,一些新的语法支持等等。

由于本人水平有限,其中难免有错误,希望大家谅解,如果大家有发现问题还请务必及时指出来,否则误导了他人我就罪不容恕了。

注意,本教程非C++教程,不会教你C++,只会教你如何使用Visual C++ 2010去练习去学习其它C++教材上面的程序。

因此建议大家认真的去看其他的C++教程,在使用Visual C++ 2010实践的时候如果遇到问题可以到这里来参考。

推荐《C++ Primer》、《C++程序设计语言》《Visual C++ 2008入门经典》。

第一章:关于Visual Studio、VC和C++的那些事首先,这三个东西有什么区别呢?VC和C++是相同的吗,有什么区别呢?我刚开始学C++的时候也有这样的问题,在这里我来替大家解释一下他们到底是什么。

实验1 VS 2010集成开发环境入门

实验1 VS 2010集成开发环境入门

实验一VS2010集成开发环境入门一、实验目的1. 熟悉VS2010集成开发环境。

初步学会使用VS 2010集成开发环境(IDE)。

①进入和退出;②菜单、工具栏的使用;③用户窗口区的划分:workspace, scource file。

2.学习新建和打开控制台应用程序的方法;3.通过运行示例程序了解程序开发过程;初步了解调试程序。

二、实验内容正所谓“工欲善其事,必先利其器”,在进行程序编写前,我们有必要对开发工具visual studio 2010进行相应的了解,能够大大提高我们的编程效率。

安装Visual C++ 2010是属于Visual Studio 2010的一部分,实际上Visual C++ 2010也有更多的子版本,正如Windows7有旗舰版、家庭高级版、家庭初级版一样,旗舰版功能最全面。

安装文件夹(文件名称VS)里是一个ISO镜像文件,这就是光盘镜像文件,通过虚拟光驱加载这个ISO镜像文件:在弹出的对话框中选择我们下载好的ISO文件。

这个时候,虚拟光驱里面已经替我们打开了ISO文件,有的机器可能会自动弹出安装提示,有的不会。

如果自动弹出安装提示,那么直接通过即可,如果没有弹出,那么用资源管理器方式进入虚拟光驱点击Setup.exe即可开始安装。

下面是开始的界面,应该选择安装VS2010.上图中选择“同意”。

然后安装包会开始搜集信息:选择设置好安装目录:然后就是开始安装了,注意安装的时候可能需要重启一两次。

最后安装成功:配置当安装成功之后,就可以开始使用了,这里先教大家做一些常见的配置,当然大家也可以直接用默认的设置。

首先,通过开始菜单来启动VS2010。

如果是第一次开始,那么可能会让你选择默认的环境设置,因为要使用VC 所以选择VC的配置:出现下面的画面表示已经成功安装和运行了。

这是起始页面,以后会经常见到它。

通过“工具”菜单中的“选项”,调出配置对话框,下面是一些常见的设置:1. 选择“文本编辑器”中的“所有语言”,把“行号”选项打上勾,则在程序编辑时会显示行号。

Vs2010 环境配置和测试

Vs2010 环境配置和测试

解压OpenCv和DiectShow

编译好的Debug和Release文件夹拷贝到 F:\Program Files\DxShow\Samples\C++\DirectShow\Ba seClasses目录下
VS2008开发环境的配置

OpenCV在VS2008中的配置
在“工具”-“选项”-“项目和解决方案”- “VC++目录”-“包含文件”中,添加:
第一个例子程序

该程序的效果是,从硬盘中加载指定的图 像文件,并在窗口中显示出来。如下图所 示:
第一个例子程序
第二个例子程序

下面将通过第二个简单的例子程序,介绍 如何编写基于对话框的MFC程序。
(1)打开VS2008编程环境。选择“文件”->“新建”->“项 目”,在弹出的“新建项目”对话框中,展开左侧树形列 表“项目类型”->“Visual C++”->“MFC”,在右侧的“Visual Studio 已安装的模板”栏中选择“MFC 应用程序”。填写 项目名称,这里为Test2。点击“确定”按钮;见下图:
精选课件14vs2010开发环境的配置新建工程时新建win32consoleapplication然后去掉预编译头选项然后在新建的工程那里最下面找到propertymanager然后再选择microsoftcppwin32user这一项debug或release的都行出来的框内选择vcdirectories然后在includedirectories和librarydirectories中添加你的依赖文件和库文件路径
2、减少开发的复杂度:确保您能更加轻松发布基于 Framework 的解决 方案,包括 Windows、Web、移动和基 于 Office 的应用。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
21

Stub
◦ 为了开发好A,我们用一个 临时替代方法的“桩”配 合A的开发和调试过程。桩 方法只需要同样的参数, 以及对参数的判断,幷返 回虚假的结果。
public class MockCardReader { public bool CheckOnline() { return true; } public void ReadCard(string path) { ; } public void SaveToDB () { ; }
5
6

白盒测试->基于源代码的测试方法
◦ 静态方法:代码走查 ◦ 动态方法:生成测试用例,驱动程序运行
7
冒泡排序算法
依次比较相邻的两个数,将小 数放在前面,大数放在后面。 即在第一趟:首先比较第1个和 第2个数,将小数放前,大数放 后。然后比较第2个数和第3个 数,将小数放前,大数放后, 如此继续,直至比较最后两个 数,将小数放前,大数放后。 至此第一趟结束,将最大的数 放到了最后。在第二趟:仍从 第一对数开始比较,一直比较 到倒数第二个数,第二趟结束。 如此下去,重复以上过程,直 至最终完成排序。
3

它浪费了太多的时间? 它仅仅是证明这些代码做了什么? 不管怎样, 系统测试将会抓住所有的Bug? 成本效率不高?
修改缺陷的代价
需求 设计 编码 测试 上线
4






1.不要让你的客户发现令人尴尬的bug。编写单元测试能让你覆盖大 部分的应用案例,并且发现常见的问题。 2.感觉更安全。通过反复的测试,你在添加新功能的时候不会影响程 序已有的功能。 3.避免写不必要的代码。这样可以让代码更简洁,更容易维护,同时 也节省开发时间。 4.具有回归性。你不用为相同的代码重复的进行测试。 5.保证代码的可读性。单元测试能让你代码的目的性和逻辑性更容易 被理解。 6.保证代码的可维护性。单元测试能强制让你对功能进行封装。 7.无忧的进行重构。在你重构以后,跑一遍测试,你就知道重构是否 对程序的功能造成了破坏。 8.节省测试的时间。测试是自动进行的,速度的快慢取决于你的CPU 。
8

方法
测试步骤
预期结果
Search BubbleSort Search BubbleSort
1. 准备输入数组{ 1, 5, 13, 6,数组 { 1, 2, 5, 6, 10, 10, 55, 99, 2, 87, 12, 12, 13, 33, 34, 47, 55, 75, 87, 99 } 34, 75, 33, 47 } 2. 执行方法

单元测试目的在于确认代码是否满足设计要求,功 能测试目的在于确认系统是否满足用户需求
◦ 程序是否按照设计的架构要求来编写,如数据访问? ◦ 同样的功能可以有不同的设计,如发送邮件是否实时?
19
◦ 所有程序代码全部都至 少执行一次 ◦ 所有的逻辑判定都至少 取“真”和“假”一次 ◦ 在循环的边界和循环体 内执行 ◦ 数据结构的有效性 ◦ 。。。
朱优良
单元测试基本概念 Visual Studio 2010 单元测试实例 单元测试技巧
测试驱动开发流程
课后实战
2

按开发阶段分
◦ 单元测试、集成测试、系统测试、验收测试

按测试技术分
◦ 白盒测试、黑盒测试、灰盒测试

按实施主体分
◦ 开发方测试、用户测试、第三方测试

按执行状态分
◦ 动态测试、静态测试
public void ReadData() { CardReader reader = new CardReader(); foreach (DevInfo dev in DevInfoList) { // 检验卡钟是否在线 if (reader.CheckOnline()) { // 读取卡钟数据 reader.ReadCard(targetPath); // 将数据保存到数据库 reader.SaveToDB(); } } }
15

语句覆盖
◦ 每条语句至少被执行一次

判定覆盖
◦ 每个while/if判定条件取得True/False值一次

条件覆盖
◦ 每个布尔表达式均取得True/False值一次 ◦ 完全的条件覆盖不能保证完全的判定覆盖

条件判定组合覆盖
◦ 判定覆盖和条件覆盖的组合

路径覆盖
◦ 所有可能的路径均被执行
16

Mock
◦ 建立仿真对象,侧重于与 对象之间的交互,不一定 需要具体的实现。
}
22
1 详细设计 2 构造类/方法/函数的主体框架
3 建立测试工程和测试类
4 依据功能生成测试用例 否 7 结果是 否正确?
5 编写实际的程序代码
6 执行测试用例

8 达到 覆盖率?
23

9 停止

私有方法测试
◦ 利用.NET反射机制,调用私有方法
11



针对Search类建立测试类SearchTest,标记为 [TestClass] 针对BubbleSort方法建立测试方法BubbleSortTest,标 记为[TestMethod] 一个测试用例主要包括输入参数和输出结果,以及实际输 出结果和预计结果的比较
12


算法说明
◦ 假设数组中元素是升序排列,将数组中间位置的值与查找的值比较 。如果两者相等,则查找成功;否则中间值将数组分成前、后两个 子数组,如果中间值大于查找值,则继续查找前一子数组,否则继 续查找后一子数组。重复以上过程,直到找到相等的元素,查找成 功;或直到找不到相等的元素,
1. 准备输入数组null 2. 执行方法
1. 准备输入无元素数组 2. 执行方法 1. 准备输入数组{ 32, 12, 6,3} 2. 执行方法
提示数组不能为空
无元素数组 数组 { 3, 6, 12, 32}
Search BubbleSort
Search BubbleSort
13

通过“测试”菜单进入“测试清单编辑器”

选择测试名称,点击“执行核取的测试”按钮,执 行测试。 单元测试过程同样可以单步调试。
14

测试用例执行的同时会显示“测试结果”

测试结果分“成功”和“失败”两种。
◦ 失败1:测试方法 BinarySearchTest 掷回例外状况: ... ◦ 失败1:Assert.AreEqual 失败。预期: <1>。实际: <-1>

有复杂对象的测试
◦ 利用DB准备测试用例数据

Windows Forms UI测试
◦ 基于反射获取句柄,发送消息给控件

Web UI测试
◦ 发送HTTP Get请求并取得响应

Javascript测试
◦ ???
24

依据测试驱动开发的流程实践单元测试
◦ ◦ ◦ ◦ ◦ 建立“二分查找”的工程、类及方法结构 建立“二分查找”的测试用例 编写“二分查找”的实现代码(确保可以正确编译) 执行测试用例,并确认测试结果 完善程序代码和测试用例

首先在菜单“测试” 中选择“编辑测试设 定”,如右图:

勾选“程序代码涵盖 范围”,点击“设定 ”。勾选要测试的成 品,如右图:
17

Visual Studio自动计算的测试覆盖为语句覆盖
18

单元测试针对局部代码,功能测试可能针对整体系 统系统
◦ 与本程序相关的其他程序还没有完成。 ◦ 有些模块是用户不可见的 ◦ 单元测试无法测非功能性要求,功能测试难以满足足够的 条件
9
新增测试项目
10
using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class TestClass1 { // 执行该类别中第一项测试前,使用 ClassInitialize 执行程序代码 // [ClassInitialize()] // public static void MyClassInitialize(TestContext testContext) { } // 在类别中的所有测试执行后,使用 ClassCleanup 执行程序代码 // [ClassCleanup()] // public static void MyClassCleanup() { } [TestMethod] public void TestMethod1() { // 在此加入测试逻辑 } }
欢迎研究与交流
朱优良 defzhu@
26
AreEqual 验证指定的两个对象是否相等 AreEqual<T>验证两个泛型资料是否相等 AreNotEqual验证指定的两个对象是否不相等 AreNotEqual<T>验证两个泛型资料是否不相等 AreNotSame验证两个对象变量是否引用不同对象 AreSame验证两个对象变量是否引用相同对象 IsFalse验证指定的条件是否为false IsTrue 验证指定的条件是否为true IsNotNull 验证指定的对象是否不为Nothing IsNull 验证指定的对象是否为Nothing
20
◦ 方法A调用方法B,现在 测试方法A,但方法B比 较耗时,或者无法直接 支持调试器,或者需要 发生实际费用,或者还 根本没有开发出来。 ◦ 比如发送邮件、发送短 信、向其他系统(SAP, 中央人事数据库)抛砖 数据等
public void ReadData() { CardReader reader = new CardReader(); foreach (DevInfo dev in DevInfoList) { // 检验卡钟是否在线 if (reader.CheckOnline()) { // 读取卡钟数据 reader.ReadCard(targetPath); // 将数据保存到数据库 reader.SaveToDB(); } } }
相关文档
最新文档