关于单元测试,如果不会用可以参照我的上篇博文————在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 < 1;}

测试代码

        /// <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 - 1];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, 0);}public static void PushTest<T>()where T : struct{var stack = GetStackInstance<T>();stack.Push(default(T));Assert.AreEqual(stack.Length, 1);}public static void PopTest<T>(params T[] values)where T : struct{var stack = GetStackInstance<T>();if (values == null){return;}int pushLength = 0;foreach (T val in values){stack.Push(val);Assert.AreEqual(stack.Length, ++pushLength);}for (int i = stack.Length - 1; i >= 0; 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>(22, 33, 55);StackTestHelper.PopTest<bool>(true, false);}[TestMethod]public void LengthTest(){StackTestHelper.LengthTest<char>();}}

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

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

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

转载于:https://www.cnblogs.com/FreeDong/p/3180603.html

VS2012 单元测试之泛型类(Generics Unit Test)相关推荐

  1. Android单元测试之Local unit tests(上)

    Android单元测试之Local unit tests(上) 简介 本地单元测试 JUnit 4 添加依赖 测试例子 结论 Mockito 添加依赖 测试例子-mock基本使用 测试例子-mock与 ...

  2. 《Pragmatic Unit Testing In Java with JUnit》—单元测试之道读后感

    <Pragmatic Unit Testing In Java with JUnit>                                                    ...

  3. 单元测试之道一:NUnit基础

    一.单元测试的概述 1.单元测试是开发编写的一小段代码,用于检测被测代码的一个很小的,很明确的功能是否正确.通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为.执行单元测试是 ...

  4. 艾伟_转载:单元测试之道(使用NUnit)

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

  5. Android 单元测试之Mockito

    在博客Android 单元测试之JUnit4中,我们简单地介绍了:什么是单元测试,为什么要用单元测试,并展示了一个简单的单元测试例子.在文章中,我们只是展示了对有返回类型的目标public方法进行了单 ...

  6. Android 单元测试之Robolectric

    前言 在博客Android 单元测试之PowerMockito,主要介绍PowerMockito的使用和对Java测试用例的强大支持.但对于Android app开发来说,写起单元测试很痛苦:一方面单 ...

  7. Java单元测试之JUnit4详解

    2019独角兽企业重金招聘Python工程师标准>>> Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @B ...

  8. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  9. php的old函数,laravel单元测试之phpUnit中old()函数报错解决

    php 的 laravel单元测试之phpUnit中old()函数报错解决 前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问 ...

  10. 补习系列(8)-springboot 单元测试之道

    目录 目标 一.About 单元测试 二.About Junit 三.SpringBoot-单元测试 项目依赖 测试样例 四.Mock测试 五.最后 目标 了解 单元测试的背景 了解如何 利用 spr ...

最新文章

  1. html显示数据库图片django,django将图片上传数据库后在前端显式的方法
  2. 鸢尾花分类_机器学习:鸢尾花数据集--贝叶斯分类
  3. TEEC_AllocateSharedMemory()和 TEEC_RegisterSharedMemory()的总结
  4. Cpp 对象模型探索 / 虚函数的调用方式
  5. qt插件元数据不包含一个有效的元数据_qt creator源码全方面分析(2-10-2)
  6. stm32 USB增加端点总结
  7. Vue 2升级 Vue 3初探小细节
  8. Guava链式风格Ordering比较器实例
  9. 怎么将java异常释放_Java_异常处理
  10. 因式分解题目及过程_【数学.天问】为什么有些题目一看就会,一做就废?是不是你的手有自己的想法?...
  11. [python] raw string,反斜杠\,re Lib
  12. 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
  13. 400电话为什么叫免费电话?
  14. JY游戏之毁经典《扫雷》
  15. chainmaker-go-sdk get cert hash failed, get cert hash failed, send QUERY_SYSTEM_CONTRACT failed
  16. Arch Linux fcitx 新世纪五笔配置
  17. C语言和JAVA的区别在哪里?
  18. 计算机考试前的心情作文,考试前的准备中考优秀作文(精选7篇)
  19. 【方法论述】量化投资——神话、黑箱与真谛
  20. emoji-mart或者emoji-picker-react实现一个类似于微信聊天的在线发送表情,再加一个带源码的纯js实现,emoji图片本地加载

热门文章

  1. [zz]c++可变参数函数使用
  2. 深入理解计算机操作系统(六)
  3. JavaWeb19-HTML篇笔记
  4. [UVA 11374] Airport Express
  5. centos7下yum源安装saltstack
  6. uva 10474 - Where is the Marble?
  7. 深入了解 Dojo 的服务器推送技术
  8. 文件解压缩,删除文件,创建文件,读取xml文件为json字符串,得到相对路径下的图片名称...
  9. HTML5之全局属性 (声明:内容节选自《HTML 5从入门到精通》)
  10. python之通过thread来实现多进程