在单元测试中,会遇到有上百个属性的实体,而这些属性中,大多都是以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

单元测试中,模拟一个新对象相关推荐

  1. 【全面解析Mock】Mock在单元测试中扮演一个什么角色?

    目录 一.Mock在单元测试中扮演一个什么角色 二.测试准备 三.使用Mock的理由 四.使用Python Mock 五.MagicMock类 六.mock.create_autospce 七.moc ...

  2. 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)

    目录 背景 第一个技巧是语句提炼(statement factoring) 第二个简化技巧 最终简化版本 背景 上篇博文:[ C ]在双链表中插入一个新值的简明程序,讲了一个简明的双链表插入函数,那个 ...

  3. 【 C 】在双链表中插入一个新值的简明程序

    上两篇博文讲了如何在单链表中插入一个值: [ C ]在单链表中插入一个新节点的尝试(一) [ C ]在单链表中插入一个新节点的尝试(二) 这篇博文讲解如何在双链表中插入一个值. 单链表的替代方案就是双 ...

  4. 【 C 】在单链表中插入一个新节点的尝试(二)

    在上篇博文中:[ C ]在单链表中插入一个新节点的尝试(一),我们最后提到了如果向单链表的开头(起始位置)插入一个节点,上篇博文中给出的程序显然完成不了这任务. 这篇博文中,我们将解决这个问题,给出一 ...

  5. 【 C 】在单链表中插入一个新节点的尝试(一)

    根据<C和指针>中讲解链表的知识,记录最终写一个在单链表中插入一个新节点的函数的过程,这个分析过程十分的有趣,准备了两篇博文,用于记录这个过程. 链表是以结构体和指针为基础的,所以结构体和 ...

  6. 如何在Java中创建一个新的List

    本文翻译自:How to make a new List in Java We create a Set as: 我们创建一个Set为: Set myset = new HashSet() How d ...

  7. html中可以添加几个类,从一个类中向一个HtmlHead对象添加多个元素

    我有一个页面的网站.我有4页所有页面都使用的主页面.每个页面使用不同的CSS和JavaScript头部标签内部.我想通过调用引用数据库表的类来添加标题,元描述和元关键字标记.但是,我无法找到一种方法将 ...

  8. python如何创建问答窗口_在tkin中创建一个新的单独窗口

    我想创建一个新的单独窗口,比如在记事本中打开一个新页面.在 我写的是:import tinter from tkinter import Tk, Frame, Menu class Example(F ...

  9. 将一个对象相同的属性(不区分大小写)赋值给一个新对象 DataTable的一个简单的扩展...

    将一个对象相同的属性(不区分大小写)赋值给一个新对象 1 public static T Mapper<S, T>(S source)2 {3 T t = Activator.Create ...

最新文章

  1. uefi 嵌入式Linux,面向嵌入式平台的高级UEFI开发环境.PDF
  2. python 文件获取绝对路径
  3. 阿里云重磅发布云原生裸金属方案 | 云原生生态周报 Vol. 53
  4. 《c语言从入门到精通》看书笔记——第4章 运算符与表达式
  5. python 图标题上移_Python-Matplotlib将图形标题移动到y轴
  6. 数字图像处理图像反转的实现_使用8086微处理器反转16位数字
  7. 【单片机基础篇】舵机模块使用
  8. 关于Java中的对象的哈希值何时相等
  9. linux进程sleep硬盘,linux下线程调用sleep,进程挂起
  10. mysql 全关联查询_Mysql 关联查询(内联、左联、右联、全联)
  11. 汉风西游辅助使用方法(此方法适用于红手指虚拟云手机和电脑雷电模拟器)
  12. NorthWind 数据库整体关系
  13. 鸿鹄云商平台--技术框架
  14. JavaScript模板引擎-artTemplate
  15. Warren Krupsaw教你拍照:光线改变一切
  16. 计算机邀请函制作教案,计算机邀请函制作要点
  17. android中用名字删除,安卓手机文件名详解~~~让你了解每个文件的作用,放心删除无用文件...
  18. 几种常见硬盘分区工具的对比
  19. 写了那么多Android布局,你知道elevation属性吗
  20. matlab画最小二乘线,matlab非线性最小二乘法求解 - 计算模拟 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. python【数据结构与算法】对python抽象的再探索(看不懂你来打我)
  2. python【蓝桥杯vip练习题库】ADV-309进制转换
  3. 强基计划有计算机专业的学校,强基计划有计算机专业吗?强基计划毕业学生国家怎么安排的?...
  4. form表单用js提前执行函数若不成功则不提交_如何用Jmeter做接口自动化测试?跟着操作一次就明白了...
  5. linux内核使用scons构建,如何使用scons进行交叉构建
  6. create react app 在start后不清空terminal
  7. 东莞网络推广浅析如何通过简化标题来提升核心关键词排名能力呢?
  8. 开发日记-20190827 关键词 计算机网络
  9. tensorflow 模型压缩
  10. 使用isolation forest进行dns网络流量异常检测