[转]VS2010中的单元测试

本文转自: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.mzph.cn/news/275394.shtml

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

相关文章

三年经验前端社招——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 …

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

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

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

钮扣电池电压电量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…

港口遭遇小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…

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

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

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

现代人的压力和焦虑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…

我是如何零基础入门前端开发的(2021 版)

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

去贵阳参观大数据到哪参观_您必须参观的四个世界

去贵阳参观大数据到哪参观Video games have always aimed to create a world separate from our own, with experiences gamers couldn’t get anywhere else. As technology has raced forward with time, these worlds have become more realistic, more believable, and at …

1年工作经验8月份大厂面试全记录

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

axure ui设计_了解针对UI / UX设计人员的Axure RP 9

axure ui设计Axure is a powerful prototyping software with a lot of history. It has been around for many years and is available for Windows and Mac. Axure gained a lot of functionality over time, and today you can look at Axure as all in one tool. You can b…

杭州 3~5年 前端面经,高频面试题总结

大家好&#xff0c;我是若川。假期归来&#xff0c;国庆期间没有更文&#xff0c;不用想每天发什么文章&#xff0c;不用担心阅读量&#xff0c;其实感觉挺好。最近组织了源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》&#xff0c;已经有超100人提交了笔…

职称以考代评学院考计算机吗,软考与职称的关系,软考是以考代评,不用另外再去评审...

Hokfung(cnitpm.com) 15:16:45软考与职称关系&#xff1a;通过了软考,我们所获得的只是一种资格,是否聘任相应的职称,完全取决于各单位的实际情况&#xff0c;国家有关部门并没有直接的规定。事实上,通过评审方法(也就是常说的"评职称”) 得到的也只是一个资格,单位既可以…

figma下载_我关于Figma文件封面的故事

figma下载It was 8:40 AM in the morning. I woke up from the bed as my subconscious memory reminded me of the team meeting at 9 AM to discuss what I am working on.早上8:40。 我从床上醒来&#xff0c;因为我的潜意识使我想起了上午9点的团队会议&#xff0c;讨论我的…

2011年上半年网页游戏开测数据报告发布

网页游戏上半年统计数据显示&#xff0c;2011年上半年&#xff0c;网页游戏开测信息总数为304款&#xff0c;排除重复开测信息&#xff0c;在2011年1月1日至6月30日这段期间&#xff0c;共收录开测&#xff08;含首次开测或更名的&#xff09;的数据为129条。 新公布的产品&…

vue-cli 将被 create-vue 替代?初始化基于 vite 的 vue3 项目为何如此简单?

大家好&#xff0c;我是若川。最近组织了源码共读活动《1个月&#xff0c;200人&#xff0c;一起读了4周源码》&#xff0c;已经有超50人提交了笔记&#xff0c;群里已经有超1500人&#xff0c;感兴趣的可以点此链接扫码加我微信 ruochuan12create-vue公开了&#xff0c;可以使…