使用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 ...
随机推荐
- myeclipse、eclipse去掉无用的workSpace
在 eclipse\configuration\.settings\org.eclipse.ui.ide.prefs 文件里面有下面这段,我们可以从 RECENT_WORKSPACES 里面看到它列出 ...
- linux系统防火墙对访问服务器的影响
一.刚部署好的linux服务器默认开启了防火墙,这时假如你在该服务器装一个tomcat并启动,在别的机器访问该tomcat是不成功的.需要关闭服务器防火墙才可以 二.service iptables ...
- C++函数指针和指针函数
本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php http://blog.csdn.net/ameyu ...
- bzoj1231: [Usaco2008 Nov]mixup2 混乱的奶牛
思路:状压dp,设f[i][j]表示当前已经选出的牛的状态为i,最后一头选出的牛为j的方案数. 然后注意就是初值不能是f[0][i]=1,因为所有牛本来都可以第一个被选中,然而这样一定初值有些牛可能就 ...
- apache基本安装配置
1.安装apache 1.安装 wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.2.31.tar.gz 2.安装zlib yum install ...
- 【实习记】2014-09-01从复杂到简单:一行命令区间查重+长整型在awk中的bug
9月1号,导出sql文件后,想到了awk,但很复杂.想到了用sed前期处理+python排序比较的区间查重法.编写加调试用了约3小时. 9月2号,编写C代码的sql语句过程中,发现排序可以交m ...
- leetcode problem 31 -- Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- Jquery div边框大全
网址 http://jquery.malsup.com/corner/ jQuery Corner是一款jQuery的插件,最初由Dave Methvin开发,但后在Malsup同志的协助下,进行了一 ...
- 如何在版本控制工具中管理Sencha Architect的項目
根據數次痛苦的經歷結合stack overflow上的解答,發現原來還是可以使用svn.git之類的版本控制工具管理Sencha Architect生成的項目的. 具體的要點如下,假定項目記作{PRO ...
- sirius的学习笔记(3)
毕业论文什么的终于搞完了,重拾我的python Creating the python skeleton project directory $ mkdir project $ cd project ...