使用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进行单元测试之一的更多相关文章

  1. 使用VisualStudio进行单元测试之三

    私有方法需不需要测试,本文不做讨论.假设您也认为有时候,私有方法也需要进行测试,那就一起来看看如何进行私有方法的测试. 准备测试代码 测试用的代码还是前面测试时使用过的代码,不同之处就是在类中增加了一 ...

  2. 使用VisualStudio进行单元测试之四 顺序测试

    前文中所提到的测试都是针对一个方法进行的独立测试,即使是同事测试多个方法,他们之间也没有影响.但是在实际的生产过程中,更多的情况是方法与方法之间是存在相互的逻辑关系的,所以也就有了今天要介绍的顺序测试 ...

  3. C#开源

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  4. C# 开源项目一

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  5. C#开源大全--汇总(转)

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  6. C#开源大全--汇总

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  7. C#开源汇总

    原文:C#开源汇总 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Pho ...

  8. C# 网上收集的一些所谓的开源项目

    C#开源 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7- ...

  9. C#开源项目大全

    C#开源项目大全   商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Ph ...

随机推荐

  1. 记:mysql 连接超时解决办法

    错误描述:Timeout in IO operation 原连接字符串为:Server=182.180.50.118;port=3306;Database=test;Uid=root;Pwd=123; ...

  2. html表格 第五节

    表格: <html> <head> <title>表格实例</title> </head> <body> <center& ...

  3. SGU 260.Puzzle (异或高斯消元)

    题意: 有n(<200)个格子,只有黑白两种颜色.可以通过操作一个格子改变它和其它一些格子的颜色.给出改变的关系和n个格子的初始颜色,输出一种操作方案使所有格子的颜色相同. Solution: ...

  4. EF 存储过程(上)

    目前,EF对存储过程的支持并不完善.存在以下问题:> EF不支持存储过程返回多表联合查询的结果集.> EF仅支持返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况.&g ...

  5. discuz注册 内部错误

    ucenter整合后,在论坛注册时出现 内部错误,无法显示,这是因为ucenter中,某个appid没写入! 可以把ucenter安装包下的utilities/checkappid.php,复制到uc ...

  6. ASP.NET 优化 check list

    看到一个蛮有意思的网站,里面有针对asp.net方方面面优化的罗列: 点击打开链接http://webdevchecklist.com/asp.net/performance/ 点击打开链接http: ...

  7. setTimeout和setInterval的深入理解

    以前写的setTimeout和setInterval的文章有些不足之处,今天抽时间整理了一下,要想真正理解还得从javascript的单线程机制说起 大概半年前发表过一篇关于setTimeout和se ...

  8. mongodb3.2系统性学习——2、write concern mongodb 写安全机制

    为了尊重作者原文章位置:http://kyfxbl.iteye.com/blog/1952941 首先讲一下mongodb 的写操作过程: mongodb有一个write concern的设置,作用是 ...

  9. Vim粘贴代码时缩进混乱

    Vim粘贴代码时缩进混乱 via 背景 在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加.原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内 ...

  10. Servlet 的由来和实现过程

           Servlet 是在服务器上运行的小程序.这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果 ...