使用VisualStudio进行单元测试之一
使用VisualStudio中的单元测试功能,可以很方便的创建单元测试项目、编写单元测试代码以及执行单元测试。而如何在VisualStudio中使用单元测试功能,就是本文和后面几篇想要说的了。
1.创建测试项目
在创建测试项目之前,我们还需要有一份待测试的代码,下面的是我准备的一小段代码。
namespace BigMan.UnitTest
{
public class Program
{
public static int Add(int a, int b)
{
return a + b;
} public static int Div(int a, int b)
{
return a / b;
}
static void Main(string[] args)
{
}
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
创建测试项目有两种方法,一种是在代码窗口中右键点击鼠标,选择【创建单元测试】。
点击之后,会弹出下面的【创建单元测试】的对话框,选中要进行单元测试的方法,再选择对应的输出项目,如果解决方案中已经存在测试项目,则在【输出项目】的下拉框里会默认选中这个项目,没有则需要选择新建测试项目。点击【确定】就可以完成测试项目的创建了。
需要说明的是,在Visual tudio 2010中,代码窗口的右键菜单里是默认有【创建单元测试】这项的,但在Visual Studio 2012里却消失了,需要大家手动把它调出来,具体方法可以参考http://www.jb51.net/softjc/83751.html
还有一种方法是在解决方案资源管理器里,通过右键新增测试项目 ,和新增其他项目是一样的,最后选择项目的时候选择单元测试项目就可以了。只是这样建好项目后,针对各个方法的测试代码就全都需要手动去写了,当然也可以 按照上面的方法去让Visual Studio自动生成,只要在【创建单元测试】的窗口中选择刚刚新建的测试项目作为【输出项目】就行了。
2.维护测试代码
using BigMan.UnitTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System; namespace UnitTestProject1
{ /// <summary>
///这是 ProgramTest 的测试类,旨在
///包含所有 ProgramTest 单元测试
///</summary>
[TestClass()]
public class ProgramTest
{
private TestContext testContextInstance; /// <summary>
///获取或设置测试上下文,上下文提供
///有关当前测试运行及其功能的信息。
///</summary>
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
} #region 附加测试特性
#endregion
/// <summary>
///Div 的测试
///</summary>
[TestMethod()]
public void DivTest()
{
int a = 1; // TODO: 初始化为适当的值
int b = 1; // TODO: 初始化为适当的值
int expected = 1; // TODO: 初始化为适当的值
int actual; actual = Program.Div(a, b);
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("验证此测试方法的正确性。");
} /// <summary>
///Add 的测试
///</summary>
[TestMethod()]
public void AddTest()
{
int a = 1; // TODO: 初始化为适当的值
int b = 1; // TODO: 初始化为适当的值
int expected = 2; // TODO: 初始化为适当的值
int actual; actual = Program.Add(a, b);
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("验证此测试方法的正确性。"); }
}
}
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
简单介绍一下测试代码,首先是使用了TestClass特性来标识这个类中包含测试方法。然后是TestContext属性,这个属性用于在测试中提供 上下文信息,实际使用过程中会有多种用途,在后面我会在用到时在详细介绍,本文的测试过程中并没有用到这个属性。【附加测试特性】中的代码因为暂时用不到 而且会显得代码太过冗长,所以被我删掉了,里面的内容我们也会在后面陆续的接触到。最下面的两个方法则是针对我们代码中的Add()和Div()产生的两 个测试方法。与测试类一样,测试方法也有个特性来标识--【TestMethod()】。
以方法
AddTest() 为例,来看一下测试方法的基本结构。第一步,对a, b, expected声明并进行了初始化,它们分别对应了Add(int,int)方法的两个参数以及期望的返回值;声明actual,并调用Add方法将实 际结果赋值给它。经过这两步,数据就准备完成了,最后是对测试结果进行判断,称之为(Assert)断言。本例中使用了
Assert.AreEqual()
,初次之外,Assert还有一系列的断言方法,如AreNotEqual,IsNull,IsNotNull,IsInstanceOfType等等,不在此一一列举了,大家可以在Visual Studio中通过代码的智能提示学习一下,或者干脆看一下MSDN的文档。最后一行的Assert.Inconclusive("验证此测试方法的正确性。");可以注释掉,否则会在运行测试时会跳过这个测试方法,并提示 "验证此测试方法的正确性"。我们修改一下测试方法中的参数a和b,以及期望结果的值,然后运行测试方法。
3.运行测试并查看测试结果
运行测试的方法也有多种,既可以通过代码窗口中鼠标右键的菜单中选择【运行测试】,也可以通过菜单栏中的【测试】-【运行】-【所有测试】来运行测 试,Visual Studio 2010 中还可以直接点击工具栏上的按钮来执行,但是在Viual Studio 2012中默认好像也消失了,应该还是需要手动来设置。
最后测试的结果会如图所示,显示的信息包括执行的测试,运行时间,未通过的测试还会给出相应的失败信息,以供跟踪解决问题。修改代码,保存后再点击全部运行,或者选择只运行失败的测试,来测试修改的结果,直到测试全部通过。
到此为止,一个最基本的,而且不够完善的单元测试就算完成了,下一篇将继续来完善对这两个方法的测试。
使用VisualStudio进行单元测试之一的更多相关文章
- 使用VisualStudio进行单元测试之三
私有方法需不需要测试,本文不做讨论.假设您也认为有时候,私有方法也需要进行测试,那就一起来看看如何进行私有方法的测试. 准备测试代码 测试用的代码还是前面测试时使用过的代码,不同之处就是在类中增加了一 ...
- 使用VisualStudio进行单元测试之四 顺序测试
前文中所提到的测试都是针对一个方法进行的独立测试,即使是同事测试多个方法,他们之间也没有影响.但是在实际的生产过程中,更多的情况是方法与方法之间是存在相互的逻辑关系的,所以也就有了今天要介绍的顺序测试 ...
- C#开源
商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...
- C# 开源项目一
商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...
- C#开源大全--汇总(转)
商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...
- C#开源大全--汇总
商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...
- C#开源汇总
原文:C#开源汇总 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Pho ...
- C# 网上收集的一些所谓的开源项目
C#开源 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7- ...
- C#开源项目大全
C#开源项目大全 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Ph ...
随机推荐
- scrapy, 自带命令行调用工具.
#-*- coding:utf-8 -*- from scrapy import cmdline cmdline.execute("scrapy crawl dmoz".split ...
- 10.13_extjs,combox,效率为什么这么低
(1)今天很累!经过三天的奋斗,终于完成了完全最优界面的快捷选址功能.今天是最后一天,最紧张,也最累. 为何我的效率不高呢?!我的时间都花费到哪儿呢?①阅读代码理解过去的逻辑:②关键技术上的再复习再巩 ...
- <s:iterator></s:iterator>循环指定输出,(status的方法使用)
list集合中的实体的一个属性是另一个实体的集合(如下) public class PetInfo { private int petId; private String private Set< ...
- ASP.NET服务端基本控件介绍
ASP.NET服务端基本控件介绍 大概分为三种控件: HTML控件,ASP.NET把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性,无法在服务端进行处理ASP.NET服务端控件,经过ASP. ...
- 使用SqlBulkCopy批量插入多条数据进入表中
由于工作中项目需求结算一次生成一批相同批次号的数据插入一个表中,然后再通过另一页面展示出来,所以需要用到一次性插入一批数据,所以就采用了SqlBulkCopy插入一批数据 1 public stati ...
- Python3 列表
list是一种有序的集合,可以随时添加和删除其中的元素. >>> classmates = ['Michael', 'Bob', 'Tracy'] >>> clas ...
- 更新ACCESS数据库出现“字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。”的解决方法
今天进行数据调试时出现“字段太小而不能接受所要添加的数据的数量.试着插入或粘贴较少的数据.”,跟踪发现是在更新数据库的数据时出现的. 打开数据库表格发现出错的数据字段类型被定义为“文本”,也就是数据最 ...
- DIV+CSS 网页布局之:两列布局
1.宽度自适应两列布局 两列布局可以使用浮动来完成,左列设置左浮动,右列设置右浮动,这样就省的再设置外边距了. 当元素使用了浮动之后,会对周围的元素造成影响,那么就需要清除浮动,通常使用两种方法.可以 ...
- C语言-06复杂数据类型-04 结构体
结构体的说明(构造类型) 数组:只能由多个相同类型的数据构成 结构体:可以由多个不同类型的数据构成 ,结构体的类型是不存在的,自己定义 int main() { // 1.定义结构体类型 定义类型的时 ...
- We7在政府门户中的应用
政府门户从传统的信息引导发展到现阶段的服务型门户,不论从角度转变上还是从平台选型上都跟以前有很大的不同,其更注重的是安全.扩展.易用和移动互联网几部分(当然这儿的注重是建立在已有政府门户电子政务三个板 ...