单元测试的运行

在编写好单元测试后,如何运行单元测试代码来进行测试?

如何运行单元测试代码

通过Visual Studio(以下简称VS)菜单项我们可以看到,在VS中运行单元测试有很多种方法

1.运行当前上下文中的测试:这种方式只运行于当前选择的项目相关的单元测试代码,这些项可以是解决方案,也可以是项目,也可以是当前选择的代码文件

2.运行解决方案中的所有测试:这种方式会将我们解决方案中的所有单元测试代码都运行一次,在我们开发过程中,每隔一段时间运行一次,就能够保证在我们写的代码当中出现尽可能少的错误

3.运行所有受影响的测试:这是一种很有用的进行单元测试的选项,当我们对代码进行修改后,可以运行这种测试,来求证这次修改对其他代码的影响,这样可以尽早的发现这次修改对其他代码所带来的影响,并将这次修改的风险降到最低

image

4.运行指定的测试:在VS中可以通过菜单项中的测试中的窗口中的测试列表编辑器来打开测试列表编辑器

image

在测试列表编辑器中,我们可以有选择性的运行一些测试

image

 

在VS中,也可以对单元测试代码进行调试,在调试时,我们也可以对测试代码添加断点,并且逐步的运行,然后在运行的过程中查看运行的状态,这和我们调试项目中的业务代码是一样的。

image

这些运行、调试和测试的菜单都在VS的快捷菜单中,都有对应的项目。

image

在我们运行测试的过程中,是不能进行调试的,我们可以根据我们的实际情况来选择使用哪一种方式来运行测试。

在我们运行单元测试代码之后怎么知道运行的单元测试哪些通过了,哪些失败了呢
在VS中,运行完测试之后,运行的结果会出现在VS中的及时窗口内,我们也可以通过VS的测试菜单中的窗口中的测试结果来查看测试结果

image

在测试结果窗口中,我们可以看到每一个测试的测试结果,其中绿色的是表示测试通过,红色的表示测试未通过,通过双击每个项,我们可以查看测试的详细信息,还可以选择其中的几项,再次进行运行或者调试

imageimageimage

单元测试(1)

在VSTS中的单元测试工具可以对任何类、接口、结构等实体的字段、属性、构造函数、方法等进行单元测试。
创建单元测试分为两类:

1.整体测试:在类名称上右击鼠标,点击创建单元测试,就可以对整个类创建单元测试了。这时它会为所有可以被测试的内容全部添加测试方法,开发人员可以直接在自动添加 的方法内添加测试代码就可以了

2.单独测试:将鼠标聚焦到待测试的这个项目名称之上,点击鼠标右键,在右键菜单中选择创建单元测试选项,这样就可以单独为某个方法来创建单元测试了。

通常我们把单元测试的代码放到一个单独的项目中,在Visual Studio中,新建项目时就有一种项目是测试项目,在实际测试时,我们在给一个类或者一个方法创建单元测试的时候Visual Studio会自动检测当前的解决方案中是不是已经有了测试项目,如果没有,它会提示我们并且,只要我们经过简单的选择之后就会自动为我们添加一个测试项目到我们的解决方案中,如果已经有了测试项目那么我们所添加的测试方法或者测试类都会自动添加到这个解决方案中的测试项目中来

在编写单元测试代码之前,我们先了解一个在单元测试中非常重要的类
Assert类

Assert:断言

在using Microsoft.VisualStudio.TestTools.UnitTesting命名空间中

Assert是一个静态类

成员:

序号

方法

描述

1

AreEqual

判断两个值是否相等,如果两个值不相等,则测试失败。有多个重载

2

AreNotEqual

判断两个值是否不相等,如果两个值相等,则测试失败。有多个重载

3

AreSame

判断引用的对象是都相同。如果两个输入内容引用不相同的对象,则测试失败

4

AreNotSame

判断引用的对象是否不相同。如果两个输入内容引用相同的对象,则测试失败

5

Fail

断言失败

6

Inconclusive

表示无法证明true或false的测试结果

7

IsFalse

指定的条件是否为false。如果该条件为true,则测试失败

8

IsTrue

指定的条件是否为true。如果该条件为false,则测试失败

9

IsInstanceOfType

测试指定的对象是否为所需类型的实例。如果所需的实例不在该对象的继承层次结构中,则测试失败

10

IsNotInstanceOfType

测试指定的对象是否为所需类型的实例。如果所需的实例在该对象的继承层次结构中,则测试失败

11

IsNull

测试指定的对象是否为空

12

IsNotNull

测试指定的对象是否为非空

TestClass特性

用于标识一个类是测试类

用法:[TestClass()]

测试类的命名方式:<被测试类的类名>Test,如被测试类名为Demo则测试类名为DemoTest

TestMethod特性

用于标识一个测试方法

用法:[TestMethod()]

测试方法的命名方式:<被测试类的方法名>Test,如被测试方法名为Demo则测试方法名为DemoTest

单元测试简介

单元测试就是编写一段代码,用来检查某个特定条件下,另外一段代码的行为是否符合我们的预期
单元测试是唯一需要编写代码才能进行测试的方法
单元测试的代码与实际程序的代码具有同等的重要性
每一个单元测试.都是用来定向测试它所对应的一个单元代码是否正确执行单元测试应该由被测试代码的编写者来完成
单元测试所用的工具:

其中有名的XUnit系列中的NUnit工具,就是用在.Net框架中的单元测试工具,VS2005之后,都自带了单元测试工具他和Visual Studio开发工具紧密的结合起来,
使用起来更加的方便和高效


单元测试的好处:

1.单元测试能够协助程序员尽快找到代码中bug的具体位置,如果不执行单元测试,那么代码中的错误都是在我们操作的时候才能发现的,
当我们发现一个错误的时
候,可能我们需要根据抛出的异常来确定是在哪个代码中出现的问题但是try catch块的效率比较低
,所以我们在大多方法中都不会对try catch块进行定义,所
以一旦发现异常,都是在最顶层的代码中所抛出的,但是这个错误往往都是在底层的代码段中发生的,
当我们发现错误的时候,只能逐行在代码中去找,大多数中,我
们都是在修改代码中出现的错误,在修改代码中,所需的时间甚至能达到80%,
这也
就是所谓的2/8现象,在这种状态之下,我们会编译整个程序然后通过逐步的操作,直到出现错误的地方,然后在查找代码中是否有错误,这样找错误的方法,
效率非
常低,如果我们使用单元测试的话,就不需要逐步的操作,而是直接运行这个方法的单元测试,
将输入的条件模拟成出现错误的时候所出现的信息和调用的方法的
形式,这样寻找错误的时间久缩短了许多,这样解决起来速度也就提高了许多,
次找到错误都去修改单元测试,那么下次,就不会再出现相同的错误,如果通过模拟单元测试也没有出现异常,这时也就可以断定,
并不是这段代码所出现的错误,
而是与其相关的代码所出现的错误,这样我们只需要调试其他代码的单元测试就可以找到真正的错误

 

2.单元测试能够让程序员对自己的程序更有自信,因为在测试的时候,已经把所有可能的bug都预料到了,程序代码中,已经把这些预料到的bug解决了,
所有我们会
对自己的程序越来越自信

 

3.能够让程序员在提交项目之前就将代码变得更加的强壮,我们在编写程序时通常会用最理想的思路进行编写,但是会有很多不可预料的错误,
使用单元测试可以
找到非理想情况下的bug,修改后,会使代码更加的健壮

 

4.单元测试可以协助我们进行更好的开发
测试驱动开发:码未动,测试先行

所谓码未动,测试先行就是先写测试代码,然后在进行编码.

因为,我们在编写单元测试的过程中,其实就是在设计我们的代码所要处理的问题,单元测试写的好,就代表你的代码写的好,
通过这种方式,我们就根据单元测试预
先设想的情况去编写代码,这样就不会盲目的在代码中添加一个属性,或者添加一个方法

 

5.单元测试能够向其他的程序员展示你的程序应该如果进行调用,通常情况下单元测试写的都是在各种情况下如何调用我们所写的那一段被测试的代码,
所以单
元测试也可以作为一个示例,向其他的程序员来展示这些我们所写的代码应该如何调用

 

6.单元测试能够让项目主管能够更了解系统当前的情况在传统的软件管理中,项目的进度和代码的质量都只是通过口头的形式传递到主管那里的,
这在很大的程度上都有很大的主观性,所以有的时候主管获取到得反馈
信息可能是事实,但有的时候就就未必是事实.
但是如果我们的项目通过了一个完
善的单元测试,那么主管就可以通过查看单元测试中的运行中的结果和单元测试的代码覆盖率,
来确定开发人员的工作是不是真的完成了


Go→百度百科