VS-unit testing

使用VS 2012自带的Unit Testing工具进行单元测试是非常方便的。网上关于这方面的例子很多,这篇随笔只起个人学习笔记之用,所以脉络不会很清晰。

1、简单Demo:

    待测试类:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace NUnitLab

{

    publicclass MaxValue

    {

        // 将要测试的方法publicstaticintMax(int[] list)

        {

            if(list ==null)

                return-1;

            intlen = list.Length;

            if(len ==0)

                returnlist[0];

            inti, max =int.MinValue;

            for(i =0; i < len; i++)

            {

                if(list[i] > max)

                    max = list[i];

            }

            return max;

        }

        publicstaticintMin(int[] list)

        {

            return0;

        }

        publicstaticvoid Main()

        {


        }

    }

}

   测试代码:

using System;using System.Reflection;using Microsoft.VisualStudio.TestTools.UnitTesting;using NUnitLab;namespace UnitTestProject

{

    [TestClass()]

    publicclass TestMaxValue

    {        [TestMethod]

        publicvoid TestMax()

        {

            Assert.AreEqual(MaxValue.Max(newint[] {9,9,1}),9);

            Assert.AreEqual(MaxValue.Max(newint[] { -1,2,1}),2);        }    }

}


2、测试准备和测试清理工作

    如果我想在所有TestMethod执行前进行一些准备工作怎么办?答案是使用ClassInitialize。

    如果我想在所有TestMethod执行完成后进行一些清理工作怎么办?答案是使用ClassCleanup。

    如果我想在每个TestMethod执行前进行一些准备工作怎么办?答案是使用TestInitialize。

    如果我想在每个TestMethod执行完成后进行一些清理工作怎么办?答案是使用TestCleanup。

    如下:

using System;using System.Reflection;using Microsoft.VisualStudio.TestTools.UnitTesting;using NUnitLab;namespace UnitTestProject

{

    [TestClass()]

    publicclass TestMaxValue

    {

        publicTestContext TestContext {get;set; }

        [ClassInitialize()]

        publicstaticvoid Init(TestContext context)

        {

            Console.WriteLine("Use ClassInitialize to run code before you run the first test in the class.");

        }

        [TestInitialize]

        publicvoid BeforeTest()

        {

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

        }

        [TestMethod]

        publicvoid TestMax()

        {

            Assert.AreEqual(MaxValue.Max(newint[] {9,9,1}),9);

            Assert.AreEqual(MaxValue.Max(newint[] { -1,2,1}),2);

            // 结果不明或者还未完成测试Assert.Inconclusive(string.Format("还未完成{0}方法的单元测试", MethodBase.GetCurrentMethod().Name));        }

        [TestCleanup]

        publicvoid AfterTest()

        {

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

        }

        [ClassCleanup()]

        publicstaticvoid Cleanup()

        {

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

        }

    }

}


3、[ExpectedException]

    Unit Testing中的attribute除了最基本的TestClass、TestMethod以外,还有一些非常用但是可能有用的attribute。

    [ExpectedException(exceptionType: Type]可以用来表明某个测试方法预期抛出某个异常,并且只有真的抛出异常时才通过测试。比如下面:

[TestMethod]

[ExpectedException(typeof(ArgumentException))]publicvoid TestExpectedException()

{

  thrownewArgumentException("参数错误");

}


4、断言API

    Assert类的静态方法如下,其中常用的包括AreEqual、AreNotEqual、AreSame、IsNull、IsTrue、Inconclusive和Fail


   针对集合类型的断言方法:


   针对字符串类型的断言方法:



5、针对ASP.NET的单元测试

    这里推荐网上的一个系列博客,

ASP.NET单元测试系列1(新手上路):http://blog.miniasp.com/post/2010/09/14/ASPNET-MVC-Unit-Testing-Part-01-Kick-off.aspx

ASP.NET单元测试系列2(可测试性):http://blog.miniasp.com/post/2010/09/15/ASPNET-MVC-Unit-Testing-Part-02-Testability.aspx

ASP.NET单元测试系列3(使用Mock):http://blog.miniasp.com/post/2010/09/16/ASPNET-MVC-Unit-Testing-Part-03-Using-Mock-moq.aspx

ASP.NET单元测试系列4(单元测试的目的与价值):http://blog.miniasp.com/post/2010/09/17/ASPNET-MVC-Unit-Testing-Part-04-The-Purpose-and-Value.aspx

ASP.NET单元测试系列5(了解Stub):http://blog.miniasp.com/post/2010/09/18/ASPNET-MVC-Unit-Testing-Part-05-Using-Stub-Object.aspx

ASP.NET单元测试系列6(测试路由规则):http://blog.miniasp.com/post/2010/09/23/ASPNET-MVC-Unit-Testing-Part-06-Routing.aspx


6、Visual Studio 2012 Fakes框架

http://www.cnblogs.com/liuliuyingxia/archive/2012/08/26/2657515.html

http://www.cnblogs.com/liuliuyingxia/archive/2012/08/25/2655856.html


7、其他资源(MSDN)

Real World Developer Testing with Visual Studio 2012:http://channel9.msdn.com/Events/TechEd/Europe/2012/AAP401

Verifying Unit Testing by Using Unit Tests:http://msdn.microsoft.com/en-us/library/dd264975(v=vs.110).aspx

转自:http://www.cnblogs.com/feichexia/archive/2012/11/21/DonetUnitTesting.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,468评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,620评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,427评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,160评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,197评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,334评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,775评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,444评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,628评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,459评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,508评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,210评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,767评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,850评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,076评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,627评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,196评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,569评论 18 139
  • 一、全局参数设置:去掉材质最大深度的勾选,这时材质反射的最大深度会采用默认的设置,一般为5,因为是最终渲染所以反射...
    壹米玖坤阅读 5,098评论 0 4
  • 欢乐颂大结局了。 两季欢乐颂我一集没落,且不管我是多么无聊才会追那么长的电视剧打发时光,也不管我是多么不合格的妈妈...
    木子的一生阅读 267评论 0 0
  • 第一章 “砖来!” 一声吆喝穿透嘈杂,直击满头大汗的副工的耳朵。副工“嗨”地提气,抱起一块土砖...
    耿志富阅读 395评论 0 0
  • 南安一直觉得,对事,对人都要有自己的见解,别听风就是雨。有时候起浪的因素不是风,而是那些在岸边观海的人。
    朱朱xxxx阅读 287评论 0 0