.NET单元测试

TDD(Test-Driven Development) 测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。单元测试是最基本的测试步骤。位于整个产品开发流程V模型的最底部。

大致如图,在各种开发流程中RA&PSD完成后,无需底层基础,UAT方案即可完成,下面的步骤也一样。UT做为底层和CODING同样重要的步骤,是每个CODER必须掌握的基础。

RA( Requirement Analysis) &

PSD ( Productive Specification Design) ----FSD(Functional Specification Design)--- Construction(Coding)

UAT( User Acceptance Testing)--- SIT(System Integration Testing)---UT(Unit Tesing)

在小量代码编写时,往往可以通过新建控制台项目(Console Application),新建网站项目(Web Form)等,在其中敲入测试代码来进行测试。一旦代码量及逻辑关系变得复杂,这种测试将难以展开,并且不具备可维护性。而且很多功能性的代码,不能完全脱离整个项目来实现。比如在某WEB项目中有一个类库,写了一些MODEL层的方法,为了验证方法的正确性,若要测试该方法,可能不得不引用项目中大量的模型,接口,以及库函数。等到编译可以通过了,却发现你必须登录才能调用该方法或者您所在的目录(Directory)根本不具备访问权限,于是又不得不去修改Authorization配置或者添加登录等方法。于是一层层下来,你的测试几乎涉及的项目的各个角落,而该测试方案又不具备高度的重用性。
下面我们以VS2012为例,来看一下如何在Visual Studio中进行单元测试。

添加对待测试工程的引用,即可方便的开始单元测试。

在测试方法中(此处为默认的TestMethod1,一般修改为 需要测试的方法名+Test )添加自己需要测试的代码。

不过在此之前,首先要引用需要测试的项目以及需要用到的类库。 此例中,我引用了微软的MVC4.0框架,以及需要测试的项目中的Controller。在此我测试该Controller的ProductCategories()方法。该方法返回一个ActionResult。测试代码中有3行,第一行用来实例化controller,第二行调用controller的方法。如果仅以该2行进行测试通过,则说明代码无语法问题,可以和其他各部分配合工作。第三行用了一个断言来检测方法返回的result是否为空。此处我断言它非空,如果为空,测试将会失败报错。

最基本的一些测试使用如下:

using System;using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace UnitTestProject1

{

[TestClass]

public class UnitTest1

{

[TestMethod]

public void TestMethod1()

{

}

[ClassInitialize]

public static void Init(TestContext context)

{

Console.WriteLine("Use ClassCleanup to run code before all tests in a class have run.");

}

[TestInitialize]

public void BeforeTest()

{

Console.WriteLine("Use TestCleanup to run code before you run each test.");

}

[TestMethod]

public void TestAMethodOrFunction()

{

Assert.AreEqual(3, 3);

}

[TestCleanup]

public void AfterTest()

{

Console.WriteLine("Use TestCleanup to run code after you run each test.");

}

[ClassCleanup]

public static void Cleanup()

{

Console.WriteLine("Use ClassCleanup to run code after all tests in a class have run.");

}

[TestMethod]

[ExpectedException(typeof(ArgumentException))]

public void TestExpectedException()

{

throw new ArgumentException("Wrong argument!");

}

}

}

其中的标签的作用和NUnit类似,只是名称稍有不同。不做过多解释。
可以通过Visual Studio 的Test菜单,运行进行有关测试的一些操作,如运行指定测试、运行所有测试、查看覆盖率。。。

例如,我们针对如下一个单元测试通过Test菜单运行所有测试如下:

也可以在Test Explorer中控制测试的运行,如

分析代码覆盖率,等等

时间: 2024-10-09 10:19:10

.NET单元测试的相关文章

单元测试Junit

###<center> 单元测试Junit </center>###- - -1.**单元测试**:> ==单元测试==是软件之中对于最小的功能模块的的测试,其可以对最基本的软件构成单元来测试.> 需要注意的是:> >**测试用例是用来达到测试想要的预期结果,而不能测试出程序的逻辑错误**. 2.**JUnit**:>1.**Junit是基于断言机制的**.是用于编写可复用测试集的简单框架,是xUnit的一个子集.xUnit是一套基于测试驱动开发的测试

MVC与单元测试实践之健身网站(四)-动作管理

网站后台负责进行动作的管理,包括动作名称.介绍.训练要点.配图等内容,以便前台能够使用这些内容.在上一篇< Fit项目图片上传和云存储的调通>中已经准备好了这里涉及到的主要技术难点,现在就开始完成该模块了. 一 列表介绍 健身管理模块包括肌群.肌肉的显示以及动作的管理.这儿也算是开始涉及"业务内容"了,还好我之前有储备了一些关于健身的资料,现在是时候派上另一种用场了. a) 肌群和肌肉因为内容相对固定,所以为了减少业务逻辑以及单元测试的代码量,当然最主要是为了偷懒,就只提供

MVC与单元测试实践之健身网站(二)-管理员模块

开始动手做这个项目时,发现无法做到完全的先设计.再编码,于是决定分模块进行,从管理员模块开始设计.编码,而且接口就已经改了好几次了. 管理员模块涉及的功能有登录和后台对管理员的维护,其中也涉及前端的开发.UI模板使用Inspinia,感觉这套模板功能丰富.界面美观,而且基于HTML5和BootStrap,对这两方面的知识也可以多些了解. 在上一篇<如何在单元测试时隔离ORM>中,解决了对Service层进行测试怎样构建伪对象的问题,随后管理员模块的Service层和单元测试在齐头并进中完成了:

单元测试(一)-NUnit基础

单元测试作为提高代码和软件质量的有效途径,其重要性和益处自不必多说,虽然我没有实践过TDD之类,但坚信单元测试的积极作用.作为一种开发方法,单元测试早在上世纪70年代就已经在Smalltalk语言被运用了,这么多年来,单元测试一次又一次证明了自身的价值,在各种开发方式此起彼伏的浪潮中,经受住了时间的考验. 现在,俺也开始学习了,并在以后好好实践.这个系列的学习素材为Roy Osherove所著The Art of Unit Testing with examples in C#, 2nd Edi

OA项目CRUD和单元测试(一)

使用ModeFirst方法生成数据库,EntityFramework5.0. 一:Model层的模型:(根据模型生成数据库) 二:Dal层的UserInfo代码: namespace SunOA.EFDAL { public class UserInfoDal { //crud DataModelContainer db = new DataModelContainer(); public UserInfo GetUserInfoById(int id) { return db.UserInfo

词频统计-单元测试

我自己的单元测试没有弄出来,我用c编的,在visual studio中貌似实现不了单元测试,而李俞寰同学是用c#编写的词频统计,在vs2015中实现单元测试无比的方便,所以我请教了他并借鉴了一下. [TestMethod()] public void DictionarySortTest() { Dictionary<string,int>input=new Dictionary<string,int>() { {"you,1}, {"are",1},

使用Xunit来进行单元测试

不管你爱与不爱,单元测试对于一个软件的长治久安还是必不可少的一环.在Visual Studio 2012后,VS中的测试浏览器也能与第三方的集成了,用起来还是非常方便的.目前在.Net框架下的测试工具主要有Nunit.内置的MSTest以及Xunit这三个工具,本文就简单的介绍一下如何在VS中使用XUnit这个测试框架的后起之秀. 安装Xunit: Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可: PM> Install-Package xunit PM> Inst

作业八——单元测试练习(个人练习)

必做一: 针对附录1给出的三角形判断Java 代码,应用等价类划分法设计测试用例,用表格形式列出设计的测试用例: 测试用例如下:(红色字体为错误预言) 序号 测试输入:三条边 测试预言:[Oracle:Illegal(非三角形),Scalene(一般三角形), Isoceles(等腰三角形),Regular(等边三角形)] 1 (5,5,5) Regular 2 (-5,-5,-5) Regular 3 (1,4,5) Illegal 4 (2,3,5) Illegal 5 (3,4,5) Sc

作业8:单元测试练习(个人练习)

要求 [必做题1] 针对附录1给出的三角形判断Java 代码,应用等价类划分法设计测试用例,用表格形式列出设计的测试用例,写到博客中.(10分) [必做题2] 模仿附录2给出的三角形判断Junit测试代码,设计单元测试脚本,测试 [必做题1]设计得到的测试用例.注意测试脚本中测试用例出现顺序与[必做题1]表格所列顺序一致.运行所得的测试脚本,截运行结果图,写到博客中,同时将源代码push到你自己的github.(20分) [必做题3] 心得体会.写下本次练习你收获的知识点(PS:测试用例设计方法

实验二 单元测试

1. 学习单元测试和代码覆盖率工具的使用 (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示.(单词之间用空格隔开,如“Hello World My First Unit Test”): (2)编写单元测试进行测试: (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%. import java.util.HashMap; import java.util.Map; public class Test { private static String