原文 VS2010(2012)中使用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
{
public class MaxValue
{
// 将要测试的方法
public static int Max(int[] list)
{
if (list == null)
return -1; int len = list.Length;
if (len == 0)
return list[0]; int i, max = int.MinValue;
for (i = 0; i < len; i++)
{
if (list[i] > max)
max = list[i];
} return max;
} public static int Min(int[] list)
{
return 0;
} public static void Main()
{ }
}
}

测试代码:

using System;
using System.Reflection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NUnitLab; namespace UnitTestProject
{
[TestClass()]
public class TestMaxValue
{
[TestMethod]
public void TestMax()
{
Assert.AreEqual(MaxValue.Max(new int[] {9, 9, 1}), 9);
Assert.AreEqual(MaxValue.Max(new int[] { -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()]
public class TestMaxValue
{
public TestContext TestContext { get; set; } [ClassInitialize()]
public static void Init(TestContext context)
{
Console.WriteLine("Use ClassInitialize to run code before you run the first test in the class.");
} [TestInitialize]
public void BeforeTest()
{
Console.WriteLine("Use TestInitialize to run code before you run each test.");
} [TestMethod]
public void TestMax()
{
Assert.AreEqual(MaxValue.Max(new int[] {9, 9, 1}), 9);
Assert.AreEqual(MaxValue.Max(new int[] { -1, 2, 1 }), 2);
// 结果不明或者还未完成测试
Assert.Inconclusive(string.Format("还未完成{0}方法的单元测试", MethodBase.GetCurrentMethod().Name));
} [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.");
}
}
}

3、[ExpectedException]

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

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

[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void TestExpectedException()
{
throw new ArgumentException("参数错误");
}

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

VS2010(2012)中使用Unit Testing进行单元测试的更多相关文章

  1. Javascript单元测试Unit Testing之QUnit

    body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; }           QUnit是一个基于JQuery的单元测试Uni ...

  2. 读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit

    读书笔记-实用单元测试(英文版) Pragmatic Unit Testing in C# with NUnit Author: Andrew Hunt ,David Thomas with Matt ...

  3. [易学易懂系列|rustlang语言|零基础|快速入门|(15)|Unit Testing单元测试]

    [易学易懂系列|rustlang语言|零基础|快速入门|(15)] 实用知识 Unit Testing单元测试 我们知道,在现代软件开发的过程中,单元测试对软件的质量极及重要. 今天我们来看看Rust ...

  4. MVC Unit Testing学习笔记

    MVC Unit Testing 参考文档: 1.http://www.asp.net/mvc/overview/testing 2.http://www.asp.net/mvc/tutorials/ ...

  5. 体验VS2017的Live Unit Testing

    相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是可以在编写代码的时候进行实时的bac ...

  6. Unit Testing of Spring MVC Controllers: “Normal” Controllers

    Original link: http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-m ...

  7. Unit Testing of Spring MVC Controllers: Configuration

    Original Link: http://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-m ...

  8. Live Unit Testing

    Live Unit Testing 相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是 ...

  9. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享

    原文:AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享 谢谢大家观看-AY的 VS2017推广系列 Live Unit Te ...

随机推荐

  1. Pyton——int内部功能介绍

    int内部功能详解: class int(object): """ int(x=0) -> integer int(x, base=10) -> intege ...

  2. Android学习笔记:使用ViewPager组件实现图片切换

    在很多App中,尤其是第一次安装启动后,都会出现几个图片进行一些app的介绍和说明,图片可以随着滑动而切换. 我们这里利用 ViewPager组件来演示如何实现这一点. 1.创建一个app工程,默认创 ...

  3. Spring Boot 探索系列 - 自动化配置篇

    26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging f ...

  4. 人人都用 Retina 屏幕的 MacBook Pro 笔记本电脑

    自从今年年初 Apple 官网产品降价我立即买了 13 寸的 Retina 屏 MacBook Pro(rMBP)之后, 这款苹果的笔记本电脑就成了我在公司和家里的唯一电脑(就是这一款). 使用苹果的 ...

  5. 基于visual Studio2013解决算法导论之023队列实现(基于数组)

     题目 基于数组的队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...

  6. Hdu 1158 Employment Planning(DP)

    Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1158 一道dp题,或许是我对dp的理解的还不够,看了题解才做出来,要加油了. 只能先上代码了 ...

  7. ReviewBoard安装和配置札记

    眼下部门还没有採用Pair Programming那种时时刻刻都在review代码的工作方式,代码Review多採用走查方式,即代码写完后召开一个Code Review的Meeting,集中时间和经验 ...

  8. A2DP和AVRCP蓝牙音频传输协议的应用解释

    A2DP全名是Advenced Audio Distribution Profile 蓝牙音频传输模型拹定.A2DP 规定了使用蓝牙非同步传输信道方式,传输高质量音乐文件数据的拹议堆栈软件和使用方法, ...

  9. Sql语句中使用参数化的Top

    在sql中使用参数化的Top,Top后面的参数要用括号括起来. 例如: select top (@ts) ID, [Type], Title, Content, LinkMan, Tel, Check ...

  10. getopt、getopt_long和getopt_long_only

    GNU/Linux的命令行选项有两种类型:短选项和长选项,前者以 '-' 作为前导符,后者以 '--' 作为前导符.比如有一个命令: $ myprog -a vv --add -b --file a. ...