本文转自:http://zxianf.blog.163.com/blog/static/30120701201101011757499/

 

在VS2010中,单元测试的功能很强大,使得建立单元测试和编写单元测试代码,以及管理和运行单元测试都变得简单起来,通过私有访问器可以对私有方法也能进行单元测试,并且支持数据驱动的单元测试。

1、建立单元测试项目

1.1、从被测试代码生成单元测试

1)实例:创建VC#模式下的控制台应用程序,工程名为CUnitTest

2)输入简单的加、减、乘、除函数代码,如下图所示

3)可按如下步骤建立单元测试

    (1)在Add方法体内,单击鼠标右键,在菜单中选择"创建单元测试",

(2)在出现的"创建单元测试"界面中,Add方法被自动勾上,表示要为这个方法创建单元测试代码的基本框架,单击确定按钮

(3)点击确定后,在新建测试项目中,输入需要创建的单元测试的新项目的名称,然后单击"创建"按钮,则自动创建一个新的单元测试代码项目。

(4)在"解决档案资源管理器"中可以看到多了一个"AddTest"项目,可以看出"AddTest"项目引用了被测项目的程序集,和单元测试框架Microsoft.VisualStudio.QualityTools.UnitTestFrame,并且自动产生两个C#代码文件AssemblyInfo.cs和ProgramTest.cs

(5)ProgramTest.cs的代码如下图所示,从图中可以看到,自动产生了一个"ProgramTest"类,并使用[TestClass()]标识为一个单元测试类,以及一个"AddTest"测试方法,。并用[TestMethod()]标识。

(6)ProgramTest.cs代码文件详讲

[TestMethod()]:说明了以下代码是一个测试用例

Int a = o; // TODO: 初始化为适当的值

int b = 0; // TODO: 初始化为适当的值

这两句是被测函数的输入参数,需要我们去修改它的值,也就是我们输入测试用例的地方。

double expected = 0; // TODO: 初始化为适当的值

double actual;

      这两句话浅显易懂,前一句话是定义了期望值和对它进行初始化,后一句话是定义了实际值。默认

Assert.AreEqual(expected, actual);

Assert在这里可以理解成断言:在VSTS里做单元测试是基于断言的测试。

默认代码中Assert.Inconclusive 表明这是一个未经验证的单元测试。在实际的程序中可以注释掉。

1.2、添加单元测试项目

(1)另外一种单元测试方法是独立添加单元测试项目,在解决方案中添加一个新的项目,选择项目类型为"测试项目",

(2)单击确定后,自动产生一个新的单元测试项目,在"解决方案资源管理器"中可看到新添加的测试项目"TestProject2"。对比"TestProject2"和"AddTest"可发现,"TestProject2"少了对被测试项目程序集的引用,仅仅引用了单元测试框架的DLL"Microsoft.VisualStudio.QualityTools.UnitTestFrame"

 

2、编写测试方法

单元测试的基本方法是调用被测代码的函数,输入函数的参数值,获取返回结果,然后与预期测试结果进行比较,如果相等则认为测试通过,否则认为测试不通过。

1、Assert类的使用

Assert.Inconclusive()    表示一个未验证的测试;

Assert.AreEqual()         测试指定的值是否相等,如果相等,则测试通过;

AreSame()            用于验证指定的两个对象变量是指向相同的对象,否则认为是错误

AreNotSame()        用于验证指定的两个对象变量是指向不同的对象,否则认为是错误

Assert.IsTrue()              测试指定的条件是否为True,如果为True,则测试通过;

Assert.IsFalse()             测试指定的条件是否为False,如果为False,则测试通过;

Assert.IsNull()               测试指定的对象是否为空引用,如果为空,则测试通过;

Assert.IsNotNull()          测试指定的对象是否为非空,如果不为空,则测试通过;

2、CollectionAssert类的使用

用于验证对象集合是否满足条件

StringAssert类的使用

用于比较字符串。

StringAssert.Contains

StringAssert.Matches

StringAssert.tartWith

 

3、数据驱动的单元测试

数据驱动的单元测试是指单元测试的输入数据遍历一个数据源的所有行。从数据源的没一行读入数据并传入给测试方法使用

3.1、ACCESS数据驱动单元测试

1)打开测试视图窗口,选择测试视图

2)在测试视图窗口中选择需要配置成数据驱动方式的单元测试方法,然后按F4,打开单元测试的属性窗口

3)编辑"数据连接字符串"属性,在"属性"窗口中单击该属性,然后单击省略号 (…)。这将打开"选择数据源"对话框,其中列出了若干个可能的数据源,包括 ODBC、Microsoft SQL Server 和 Microsoft Access。选择一个数据源后将打开一个特定于该数据源类型的对话框;可以使用此对话框配置该数据源的连接属性。配置完数据连接后,连接字符串会作为"数据连接字符串"的值出现。此字符串还会作为单元测试方法的一个属性存储起来

4)在这个界面中,选择一个Acess表data.mdb,单击"确定"按钮完成设置,回到"单元测试属性"窗口。可以看到数据源的已经设置好。

5)在建立与数据源的连接之后,可以选择一个数据表。当您单击"属性"窗口的值列中的下拉列表时,将会列出所连接的数据库中的表。从此列表中选择的表就是在运行单元测试时将检索其中的行的表。与"数据连接字符串"等其他属性一样,"数据表名称"也会作为单元测试方法的一个属性存储起来。

6)在"数据访问方法",请选择"顺序"或"随机";默认值为"顺序"。此设置表示从数据源的表中检索记录的顺序。

    可以看到,在测试方法前面已经添加了一行:

7)数据源的使用

通过 TestContext 类的 DataRow 和 DataConnection 属性将数据提供给正在运行的单元测试。下面为使用TestContext 类的 DataRow属性来读入数据行

8)Acess数据源中的表为

3.2、读取Excel的方法:

1)在桌面新建一个txt文件,更改文件名为data.dsn

2)选中"数据库连接字符串",单击右边列的按钮,更改数据源为Microsoft ODBC数据源,点击"确定"按钮

3)选择使用连接字符串,点击生成

4)选择Excel数据源的驱动程序,点击"下一步"

5)选择data.dsn为数据源保存文件,一直选择"下一步"。

6)在弹出的选择工作簿中,选择用例的输入文件data.txt,点击"确定"

7)选择用例所在的Sheet页,选择"完成"

8)数据源的使用代码

4、单元测试的运行

单元测试的运行有两种方式:调试和运行。可以像调试普通代码一样对单元测试代码进行调试,当然也可以直接运行,单元测试的结果将在"测试结果"界面中展示,双击测试结果,可以得到测试结果的详细信息。单元测试的代码覆盖率可以在"代码覆盖率结果"界面中展示。

5、附加测试属性

"附加测试属性"。默认都是被注释掉的,只要我们取消注释就可以使用了。这个功能的加入,很大程度上是为了增加测试的灵活性。具体的属性有:

[ClassInitialize()]在运行类的第一个测试前先运行代码

[ClassCleanup()]在运行完类中的所有测试后再运行代码

[TestInitialize()]在运行每个测试前先运行代码

[TestCleanup()]在运行完每个测试后运行代码

如在执行测试时,将测试执行时间输入到日志中,代码如下

 

转载于:https://www.cnblogs.com/freeliver54/archive/2011/07/07/2099752.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/275394.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/275394.shtml
英文地址,请注明出处:http://en.pswp.cn/news/275394.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA、 JetBrains、webstorm、 pycharm 破解教程

[TOC] 第一步 下载IDEA 2018年2月前版本 ) !!!注意 一定要2018年2月前的版本 最新版本不确定能否使用 第二步 打开破解包网址 下图所示 点击下载 点击下载第三步 把下载好的jar包放到IDEA安装目录的/bin里面 第四步 打开上图的圈中的文件 在两…

微型计算机储存信息的基本单位是什么,16.磁盘存储器存、取信息的最基本单位是...

【填空题】学习完成4.6的教学视频以后,完成齿轮建模并测量其质量为( )kg。【判断题】在单链表中设置头结点的作用是为了操作上的方便【判断题】财务杠杆会增加ROE和EPS的波动程度【多选题】形式美的构成因素一般划分为两大部分:一部分是构成形式美的();一部分是构成形式美的(),…

三年经验前端社招——Shopee

大家好,我是若川。最近组织了源码共读活动《1个月,200人,一起读了4周源码》,已经有超50人提交了笔记,群里已经有超1200人,感兴趣的可以点此链接扫码加我微信 ruochuan12本文经作者lxcan 授权转载&#xff0…

简易拨号器iCall

iCall是由哥开发的一款android平台的电话拨号小工具&#xff0c;简单不能再简单的Android手机拨号程序。 代码不过几行&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/…

苹果手机隐私分析数据是什么_苹果公司以用户为中心的隐私保护方法能教给我们什么?

苹果手机隐私分析数据是什么重点 (Top highlight)Moving beyond the rollercoaster of excitement and controversy Apple has been in for the last week, there was one thing in the WWDC keynote that stood out for me. One thing I really appreciated seeing. There is …

中外计算机百科知识,计算机百科知识.doc

计算机百科知识计算机百科知识1.微机热启动时,需要按下的组合键是( D )A、CtrlDel B、AltDel C、CtrlAlt D、CtrlAltDel2.显示器和打印机都是&#xff1a;( D )A、显示设备B、输入设备C、存储设备D、输出设备3.HOME键的作用是( B ) A、将光标移到当前行的右端 B、将光标移到当前…

为什么 Vue2 this 能够直接获取到 data 和 methods ? 源码揭秘!

1. 前言大家好&#xff0c;我是若川。最近组织了源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》&#xff0c;已经有超50人提交了笔记&#xff0c;群里已经有超1200人&#xff0c;感兴趣的可以点此链接扫码加我微信 ruochuan12之前写的《学习源码整体架构系…

java包的命名规则技巧

java包的概念和.net名称空间非常类似。.net的名称空间通常以程序的项目名称和功能模块或层次结构命名。 java包也是如此。唯一不同的是java程序最外层包的名称通常以com开始。起初我不知道为什么这么命名。后来发现&#xff0c;原来java包命名其实就是网站域名去掉www的倒写然后…

钮扣电池电压电量_纽扣厂

钮扣电池电压电量S. is a designer and works at the button factory. Despite its scary look, S. goes there every day, and he loves his routine, never missing a day!S.是一位设计师&#xff0c;在按钮工厂工作。 尽管看上去很恐怖&#xff0c;S。每天都去那里&#xff…

18秋学期《计算机网络》在线作业,18秋北交《计算机应用基础及计算机网络与应用》在线作业一-2辅导资料.docx...

18秋北交《计算机应用基础及计算机网络与应用》在线作业一-2辅导资料.docx18 秋北交计算机应用基础及计算机网络与应用在线作业一-21、B 2、D 3、B 4、A 5、B 一、单选题共 10 题&#xff0c;40 分1、决定局域网特性的主要技术 要素包括( )、传输介质与介 质访问控制方法。A 所…

三年经验前端社招——慧择网

大家好&#xff0c;我是若川。最近组织了源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》&#xff0c;已经有超50人提交了笔记&#xff0c;群里已经有超1200人&#xff0c;感兴趣的可以点此链接扫码加我微信 ruochuan12本文经作者lxcan 授权转载&#xff0…

什么是云计算?云计算学习基础

云计算&#xff08;cloudcomputing&#xff09;是基于互联网的相关服务的增加、使用和交付模式&#xff0c;通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。 美国国家标准与技术研究院&#xff08;NIST&#xff09;定义&#xff1a;云计算是一种按使用量付费的模式&…

港口遭遇小MM

港口&#xff0c;遭遇小MM 刚开始&#xff0c;丫头看见我拍她&#xff0c;对我毫不客气地说&#xff1a;“侵犯肖像权&#xff0c;除非立刻买两份冰淇淋来&#xff01;”后来&#xff0c;她就一直跟在我屁股后面&#xff0c;求我给她拍。轮到我说话了&#xff1a;“拍一张&…

印发 指南 通知_通知设计的综合指南

印发 指南 通知重点 (Top highlight)Peripheral messages in digital products, collectively known as notifications, should never harm the user experience. Instead, they must contribute to an experience that helps people accomplish a goal. Addressing notificati…

电大免考英语计算机,关于电大本科课程中英语免修免考的条件

关于免考的规定&#xff1a;(一) 已具有国民教育系列本科以上学历(含本科)&#xff0c;可免考全部统考科目&#xff1b;(二) 除计算机类专业学生外&#xff0c;获得全国计算机等级考试一级B或以上级别证书者可免考“计算机应用基础”&#xff1b;(三) 除英语专业学生外&#xf…

三年经验前端社招——众安保险

大家好&#xff0c;我是若川。最近组织了源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》&#xff0c;已经有超50人提交了笔记&#xff0c;群里已经有超1200人&#xff0c;感兴趣的可以点此链接扫码加我微信 ruochuan12本文经作者lxcan 授权转载&#xff0…

当文字成为雨滴:HTML、CSS、JS创作炫酷的“文字雨“动画!

简介 在本篇技术文章中&#xff0c;将介绍如何使用HTML、CSS和JavaScript创建一个独特而引人注目的"文字(字母&数字)"雨&#x1f327;️动画效果。通过该动画&#xff0c;展现出的是一系列随机字符将从云朵中下落像是将文字变成雨滴从天而降&#xff0c;营造出与…

《梦断代码》阅读笔记01

这几天阅读了老师推荐的《梦断代码》前几章&#xff0c;通过本书简介可以知道本书大概主要讲的是做软件过程中的困难。 第一章软件时间&#xff0c;主要讲的是从事软件制作行业的艰辛&#xff0c;需要没日没夜的加班工作&#xff0c;书中有这样一句话让我记忆深刻&#xff1a;“…

关于html:form/html:form特性

<html:form>第一遍执行的时候他就会根据action属性中指定的Action到struts-config.xml文件中找到该Action&#xff0c;并把该Action绑定ActionForm实例化&#xff0c;如果<html:form>的子标签中(也就是文本框等一些元素)有值&#xff0c;则把这些值填充到对应的Act…

现代人的压力和焦虑_设计师如何建立减少焦虑和压力的体验

现代人的压力和焦虑From my Brooklyn apartment in New York City, I watch Gov. Andrew Cuomo share the daily Covid-19 death toll with the nation. I watch his broadcast every day, around 11 a.m. I dubbed Cuomo America’s #crisisdaddy and have posted so many Ins…