关于单元测试,如果不会用可以参照我的上篇博文————在Visual Studio 2012使用单元测试

首先分享一篇博文,[Visual Studio] 开启Visual Studio 2012通过右键菜单创建单元测试(Unit Test)

泛型有两种,一般泛型与类型约束泛型,在对包含泛型的方法进行单元测试中也可以这么分,详情可参阅http://msdn.microsoft.com/en-us/library/vstudio/ms243401.aspx  。从该页面可以知道,关于泛型的单元测试,微软类库(Microsoft.VisualStudio.TestTools.UnitTesting)提供了类“GenericParameterHelper”帮助我们编写Unit Test代码。

首先看下非类型约束的一个demo,我就直接上代码了

        public static bool IsCollectionEmpty<T>(ICollection<T> collection)
{
return collection == null || collection.Count < ;
}

测试代码

        /// <summary>
///IsCollectionEmpty 的测试
///</summary>
public void IsCollectionEmptyTestHelper<T>()
{
//三个用例:以非空集合,空集合,null分别作为参数
ICollection<T> collection = new T[]{default(T)}; // TODO: 初始化为适当的值
bool expected = false; // TODO: 初始化为适当的值
bool actual;
actual = UtilityCheckData.IsCollectionEmpty<T>(collection);
Assert.AreEqual(expected, actual); collection = new T[] { };
Assert.AreEqual(true, UtilityCheckData.IsCollectionEmpty<T>(collection)); Assert.AreEqual(true, UtilityCheckData.IsCollectionEmpty<T>(null));
} [TestMethod()]
public void IsCollectionEmptyTest()
{
IsCollectionEmptyTestHelper<GenericParameterHelper>();
}

关于泛型的测试其实也挺简单的,没什么可以啰嗦的,但是如果有了类型约束,那么GenericParameterHelper类将很可能不再能用了。

然后再来看我做的一个类型约束泛型的单元测试代码。

写一个类似栈的需测试的类:

    public class StackNum<T> where T : struct
{
List<T> array = null; public StackNum()
{
this.array = new List<T>();
} public void Push(T value)
{
array.Add(value);
} public T Pop()
{
T val = array[this.Length - ];
this.array.Remove(val);
return val;
} public int Length
{
get { return this.array.Count; }
}
}

StackNum

在测试项目编写一个测试帮助类

    class StackTestHelper
{
public static void LengthTest<T>()
where T : struct
{
var stack = GetStackInstance<T>();
Assert.AreEqual(stack.Length, );
} public static void PushTest<T>()
where T : struct
{
var stack = GetStackInstance<T>();
stack.Push(default(T));
Assert.AreEqual(stack.Length, );
} public static void PopTest<T>(params T[] values)
where T : struct
{
var stack = GetStackInstance<T>();
if (values == null)
{
return;
} int pushLength = ;
foreach (T val in values)
{
stack.Push(val);
Assert.AreEqual(stack.Length, ++pushLength);
} for (int i = stack.Length - ; i >= ; i--)
{
Assert.AreEqual<T>(stack.Pop(), values[i]);
Assert.AreEqual(stack.Length, i);
}
} public static StackNum<T> GetStackInstance<T>()
where T : struct
{
return new StackNum<T>();
}
}

StackTestHelper

测试类

    [TestClass]
public class StackTest
{
[TestMethod]
public void PushTest()
{
StackTestHelper.PushTest<decimal>();
StackTestHelper.PushTest<double>();
} [TestMethod]
public void PopTest()
{
StackTestHelper.PopTest<int>(, , );
StackTestHelper.PopTest<bool>(true, false);
} [TestMethod]
public void LengthTest()
{
StackTestHelper.LengthTest<char>();
}
}

这么写单元测试可以简单的切换我们所需要进行测试的各种类型。

总结:对泛型做单元测试时相对会比一般的测试多写一些代码,不过多进行些抽象封装还是完全可以接受的,目前还不知道有什么更好的办法,如您有更好的办法,请赐教,草民将不尽感激!!

题外话:感觉我编写单元测试的代码比我编写满足功能需求的代码还多,但是我对着玩意儿却丝毫没任何抵触情绪,希望刚开始步入Unit Test的你也是。

VS2012 单元测试之泛型类(Generics Unit Test)的更多相关文章

  1. 玩转单元测试之Testing Spring MVC Controllers

    玩转单元测试之 Testing Spring MVC Controllers 转载注明出处:http://www.cnblogs.com/wade-xu/p/4311657.html The Spri ...

  2. [转载]单元测试之道(使用NUnit)

    首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而又忐忑的心情点击界面上的 ...

  3. 单元测试之道(使用NUnit)

    首先来看下面几个场景你是否熟悉 1.你正在开发一个系统,你不断地编码-编译-调试-编码-编译-调试……终于,你负责的功能模块从上到下全部完成且编译通过!你长出一口气,怀着激动而 又忐忑的心情点击界面上 ...

  4. Visual Studio 单元测试之二---顺序单元测试

    原文:Visual Studio 单元测试之二---顺序单元测试 此文是上一篇博文:Visual Studio 单元测试之一---普通单元测试的后续篇章.如果读者对Visual Studio的单元测试 ...

  5. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

  6. 玩转单元测试之WireMock -- Web服务模拟器

    玩转单元测试之WireMock -- Web服务模拟器 WireMock 是一个灵活的库用于 Web 服务测试,和其他测试工具不同的是,WireMock 创建一个实际的 HTTP服务器来运行你的 We ...

  7. 单元测试之NSNull 检测

    本文主要讲 单元测试之NSNull 检测,在现实开发中,我们最烦的往往就是服务端返回的数据中隐藏着NSNull的数据,一般我们的做法是通过[data isKindOfClass:[NSNull cla ...

  8. 使用VisualStudio进行单元测试之二

    借着工作忙的借口,偷了两天懒,今天继续单元测试之旅.前面说了如何进行一个最简单的单元测试,这次呢就跟大家一起来熟悉一下,在visual studio中如何进行数据驱动的单元测试. 开始之前先来明确一下 ...

  9. 单元测试之Qunit

    单元测试之Qunit 前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QU ...

随机推荐

  1. 实践 Neutron 前的两个准备工作 - 每天5分钟玩转 OpenStack(78)

    上一节配置了 linux-bridge mechanism driver,本节再做两个准备工作: 1. 检视初始的网络状态.2. 了解 linux bridge 环境中的各种网络设备. 初始网络状态 ...

  2. 为 Neutron 准备物理基础设施(I) - 每天5分钟玩转 OpenStack(75)

    前面讨论了 Neutron 的架构和基础知识,接下来就要通过实验深入学习和实践了. 第一步就是准备实验用的物理环境,考虑如下几个问题: 需要几个节点? 如何分配节点的角色? 节点上部署哪些服务? 配几 ...

  3. NFS Volume Provider(Part II) - 每天5分钟玩转 OpenStack(63)

    上一节我们将 NFS volume provider 配置就绪,本节将创建 volume. 创建 volume 创建 NFS volume 操作方法与 LVM volume 一样,唯一区别是在 vol ...

  4. IOS开发之新浪围脖

    IOS开发和Web开发一样,网络请求方式包括Get和Post方式.Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据.下面还会提到如何在我们的项 ...

  5. Objective-C中的继承和多态

    面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...

  6. 2014年百度之星程序设计大赛 - 初赛(第二轮)JZP Set

    题目描述:一个{1, ..., n}的子集S被称为JZP集,当且仅当对于任意S中的两个数x,y,若(x+y)/2为整数,那么(x+y)/2也属于S.例如,n=3,S={1,3}不是JZP集,因为(1+ ...

  7. Apache漏洞修复

    今天受同事的委托,修复一台服务器的Apache漏洞,主要集中在以下几点: 1.Apache httpd remote denial of service(中危) 修复建议:将Apache HTTP S ...

  8. 学习总结之 WebApi 用户登录和匿名登录,及权限验证

    近些天,看了一些博客园大牛关于webApi项目的的文章,也有请教师兄一些问题,自己做了个Demo试了试,收获甚多.感谢感谢,下面是我一些学习的总结,如若有错的地方请多多指教!! WebApi登陆与身份 ...

  9. How to implement a neural network

    神经网络的实践笔记 link: http://peterroelants.github.io/posts/neural_network_implementation_part01/ 1. 生成训练数据 ...

  10. 关于一道数据库例题的解析。为什么σ age>22 (πS_ID,SCORE (SC) ) 选项是错的?

    本人大二学子.近段时间在做数据库复习题的时候遇到一道题,如下. 有关系SC(S_ID,C_ID,AGE,SCORE),查找年龄大于22岁的学生的学号和分数,正确的关系代数表达式是( ) . ⅰ. πS ...