单元测试中,模拟一个新对象
在单元测试中,会遇到有上百个属性的实体,而这些属性中,大多都是以String Int32 等类型为主,而如果模拟这个实体,给这个实体赋随机值,也要写上百行代码,效率极低
因此,我们可以通过反射来处理。
1 protected object CreateNewObject(object o, string instanceClassNames) 2 { 3 Guid guid = Guid.NewGuid(); 4 Random rd = new Random(); 5 int randomNum = rd.Next(); 6 7 Type type = o.GetType(); 8 PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); 9 foreach (PropertyInfo property in properties) 10 { 11 if (property.CanWrite == false) 12 { 13 //如果该属性没有可写方法,退出当次循环 14 continue; 15 } 16 17 bool isDefaultCase = false; 18 switch (property.PropertyType.Name) 19 { 20 case "String": 21 property.SetValue(o, property.Name + guid.ToString(), null); 22 break; 23 case "Int32": 24 property.SetValue(o, randomNum, null); 25 break; 26 case "Boolean": 27 property.SetValue(o, true, null); 28 break; 29 case "DateTime": 30 property.SetValue(o, DateTime.Now, null); 31 break; 32 case "Guid": 33 property.SetValue(o, guid, null); 34 break; 35 default: 36 isDefaultCase = true; 37 break; 38 } 39 40 if (isDefaultCase 41 && !string.IsNullOrEmpty(instanceClassNames) 42 && !string.IsNullOrEmpty(property.PropertyType.Name) 43 && instanceClassNames.Contains(property.PropertyType.Name)) 44 { 45 // 如果是设置的自定义类型,递归模拟对象示例 46 object oSub = Assembly.Load("Strong.OnlineSchool.Entities").CreateInstance(property.PropertyType.FullName); 47 property.SetValue(o, CreateNewObject(oSub, instanceClassNames), null); 48 } 49 } 50 51 return o; 52 }
这里并没有写出所有的类型,只需要根据自己的测试需要补充。
转载于:https://www.cnblogs.com/StanBlogs/archive/2012/06/12/2546415.html
单元测试中,模拟一个新对象相关推荐
- 【全面解析Mock】Mock在单元测试中扮演一个什么角色?
目录 一.Mock在单元测试中扮演一个什么角色 二.测试准备 三.使用Mock的理由 四.使用Python Mock 五.MagicMock类 六.mock.create_autospce 七.moc ...
- 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)
目录 背景 第一个技巧是语句提炼(statement factoring) 第二个简化技巧 最终简化版本 背景 上篇博文:[ C ]在双链表中插入一个新值的简明程序,讲了一个简明的双链表插入函数,那个 ...
- 【 C 】在双链表中插入一个新值的简明程序
上两篇博文讲了如何在单链表中插入一个值: [ C ]在单链表中插入一个新节点的尝试(一) [ C ]在单链表中插入一个新节点的尝试(二) 这篇博文讲解如何在双链表中插入一个值. 单链表的替代方案就是双 ...
- 【 C 】在单链表中插入一个新节点的尝试(二)
在上篇博文中:[ C ]在单链表中插入一个新节点的尝试(一),我们最后提到了如果向单链表的开头(起始位置)插入一个节点,上篇博文中给出的程序显然完成不了这任务. 这篇博文中,我们将解决这个问题,给出一 ...
- 【 C 】在单链表中插入一个新节点的尝试(一)
根据<C和指针>中讲解链表的知识,记录最终写一个在单链表中插入一个新节点的函数的过程,这个分析过程十分的有趣,准备了两篇博文,用于记录这个过程. 链表是以结构体和指针为基础的,所以结构体和 ...
- 如何在Java中创建一个新的List
本文翻译自:How to make a new List in Java We create a Set as: 我们创建一个Set为: Set myset = new HashSet() How d ...
- html中可以添加几个类,从一个类中向一个HtmlHead对象添加多个元素
我有一个页面的网站.我有4页所有页面都使用的主页面.每个页面使用不同的CSS和JavaScript头部标签内部.我想通过调用引用数据库表的类来添加标题,元描述和元关键字标记.但是,我无法找到一种方法将 ...
- python如何创建问答窗口_在tkin中创建一个新的单独窗口
我想创建一个新的单独窗口,比如在记事本中打开一个新页面.在 我写的是:import tinter from tkinter import Tk, Frame, Menu class Example(F ...
- 将一个对象相同的属性(不区分大小写)赋值给一个新对象 DataTable的一个简单的扩展...
将一个对象相同的属性(不区分大小写)赋值给一个新对象 1 public static T Mapper<S, T>(S source)2 {3 T t = Activator.Create ...
最新文章
- uefi 嵌入式Linux,面向嵌入式平台的高级UEFI开发环境.PDF
- python 文件获取绝对路径
- 阿里云重磅发布云原生裸金属方案 | 云原生生态周报 Vol. 53
- 《c语言从入门到精通》看书笔记——第4章 运算符与表达式
- python 图标题上移_Python-Matplotlib将图形标题移动到y轴
- 数字图像处理图像反转的实现_使用8086微处理器反转16位数字
- 【单片机基础篇】舵机模块使用
- 关于Java中的对象的哈希值何时相等
- linux进程sleep硬盘,linux下线程调用sleep,进程挂起
- mysql 全关联查询_Mysql 关联查询(内联、左联、右联、全联)
- 汉风西游辅助使用方法(此方法适用于红手指虚拟云手机和电脑雷电模拟器)
- NorthWind 数据库整体关系
- 鸿鹄云商平台--技术框架
- JavaScript模板引擎-artTemplate
- Warren Krupsaw教你拍照:光线改变一切
- 计算机邀请函制作教案,计算机邀请函制作要点
- android中用名字删除,安卓手机文件名详解~~~让你了解每个文件的作用,放心删除无用文件...
- 几种常见硬盘分区工具的对比
- 写了那么多Android布局,你知道elevation属性吗
- matlab画最小二乘线,matlab非线性最小二乘法求解 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
热门文章
- python【数据结构与算法】对python抽象的再探索(看不懂你来打我)
- python【蓝桥杯vip练习题库】ADV-309进制转换
- 强基计划有计算机专业的学校,强基计划有计算机专业吗?强基计划毕业学生国家怎么安排的?...
- form表单用js提前执行函数若不成功则不提交_如何用Jmeter做接口自动化测试?跟着操作一次就明白了...
- linux内核使用scons构建,如何使用scons进行交叉构建
- create react app 在start后不清空terminal
- 东莞网络推广浅析如何通过简化标题来提升核心关键词排名能力呢?
- 开发日记-20190827 关键词 计算机网络
- tensorflow 模型压缩
- 使用isolation forest进行dns网络流量异常检测