在实际项目中很多地方用到DateTime.Now,这个时间是时时变化的。如果要进行单元测试对比预期结果时,这个时间无法预测,可以添加如下两个时间类

  1. namespace Common.Helper
  2. {
  3. /// <summary>
  4. /// 获取当前时间
  5. /// However, when unit testing with static state, always remember to tear down your fixture by calling .
  6. /// </summary>
  7. public abstract class TimeProvider
  8. {
  9. private static TimeProvider current =
  10. DefaultTimeProvider.Instance;
  11. public static TimeProvider Current
  12. {
  13. get { return TimeProvider.current; }
  14. set
  15. {
  16. if (value == null)
  17. {
  18. throw new ArgumentNullException("value");
  19. }
  20. TimeProvider.current = value;
  21. }
  22. }
  23.  
  24. public abstract DateTime Now { get; }
  25.  
  26. public static void ResetToDefault()
  27. {
  28. TimeProvider.current = DefaultTimeProvider.Instance;
  29. }
  30. }
  31. public class DefaultTimeProvider : TimeProvider
  32. {
  33. private readonly static DefaultTimeProvider instance =
  34. new DefaultTimeProvider();
  35.  
  36. private DefaultTimeProvider() { }
  37.  
  38. public override DateTime Now
  39. {
  40. get { return DateTime.Now; }
  41. }
  42.  
  43. public static DefaultTimeProvider Instance
  44. {
  45. get { return DefaultTimeProvider.instance; }
  46. }
  47. }
  48. }

在实际代码中使用方法:

  1. var now = TimeProvider.Current.Now;

单元测试模拟方法:

  1. var timeMock = new Mock<TimeProvider>();
  2. timeMock.SetupGet(tp => tp.Now).Returns(new DateTime(, , ));
  3. TimeProvider.Current = timeMock.Object;

需要用到moq4模拟对象

单元测试mock当前时间的更多相关文章

  1. 教育单元测试mock框架优化之路(下)

    转载:https://sq.163yun.com/blog/article/169563599967031296 四.循环依赖的解决 果然! 当我将@SpyBean应用到存在有循环依赖的Bean上时, ...

  2. 教育单元测试mock框架优化之路(上)

    转载:https://sq.163yun.com/blog/article/169561874192850944 众所周知,mock对于单元测试,尤其是基于spring容器的单元测试,是非常重要的.它 ...

  3. 单元测试mock框架——jmockit实战

    JMockit是google code上面的一个java单元测试mock项目,她很方便地让你对单元测试中的final类,静态方法,构造方法进行mock,功能强大.项目地址在:http://jmocki ...

  4. 单元测试 mock EF 中DbContext 和DbSet Include

    现在EF越来越流行了,很多时候业务成都是直接访问DbContext 和DbSet来操作数据的. 那么我们测试的时候如何来mock这2个对象了?现在时间很晚了, 就直接贴code吧 首先看看的我们DbC ...

  5. 教育单元测试mock框架优化之路(中)

    转载:https://sq.163yun.com/blog/article/169564470918451200 三.间接依赖的bean的mock替换 对于前面提供的@Mock,@Spy+@Injec ...

  6. Mvc controller单元测试 Mock Url对象

    被测试Action 包含有Url对象的代码: data = new data { title = ds.Name, icon = "folder", attr = new { id ...

  7. 基于spring与mockito单元测试Mock对象注入

    转载:http://www.blogjava.net/qileilove/archive/2014/03/07/410713.html 1.关键词 单元测试.spring.mockito 2.概述 单 ...

  8. 单元测试mock之mockito使用

    先来一个简单的例子来感受一下 外部接口类:TestService.java package com.yzl.mock; /** * 测试用服务 * * @author yangzhilong */ p ...

  9. Object-C单元测试&MOCK(摘录精选)

    断言测试类型: 下面一共18个断言(SDK中也是18个,其含义转自ios UnitTest 学习笔记,真心佩服原文的博主): XCTFail(format…) 生成一个失败的测试: XCTAssert ...

随机推荐

  1. JSP 页面跳转的实现方法

    客户端跳转 1. 使用 href 超链接标记  <a href="new.jsp">跳转</a> 2. 使用表单提交完成跳转  <form actio ...

  2. iOS dispatch_semaphore_t(信号量)和 2.dispatch_group_t (组)

    2017年,回望过去,前半年还致力于iOS开发,后半年就开始了python的漫漫之路,一路上走走停停,不过还好,总的来说,2017是收获的一年,也是付出的一年.2018加油! 话题转回来,关于线程执行 ...

  3. Chapter6_访问权限控制_访问权限修饰词

    Java中有四种访问权限,public,private,protected和包访问权限,它们是置于类中每一个成员之前的定义,无论是一个域还是一个方法,下面一一介绍. 一.包访问权限 如果不提供任何访问 ...

  4. Mac 安装配置Jenkins+github完成项目构建

    Jenkins Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件.Jenkins 支持各种运行方式,可通过系统包, Docker 或者通过一个独立的 J ...

  5. jQuery实现简单的五星好评

    最近一直在认真的努力工作,今天工作完成得差不多了,比较轻松点,在工作中有遇到用jq实现五星好评功能,觉得简单又有用,所以空闲时间就想分享出来. css部分: <style> .u_star ...

  6. 在Linux下部署mysql时,使用group by碰到的问题

    mysql使用group by 的时候报错,错误信息如下: 1055:ER_WRONG_FIELD_WITH_GROUP: Expression #2 of SELECT list is not in ...

  7. 更改MAC地址,突破公司绑定MAC地址的限制

    步骤/方法 1 打开开始菜单,选择控制面板. 2   3 打开控制面板项,选择网络和共享中心. 4   5 选择更改适配器设置. 6   7 选择本地要修改MAC地址的网卡. 8   9 右键该网卡, ...

  8. U盘安装centos7 关键步骤

    出现安装界面 按tab键或e键进行修改 一般默认第二行为: vmlinuz intrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd ...

  9. 【慕课网实战】二、以慕课网日志分析为例 进入大数据 Spark SQL 的世界

    MapReduce的局限性: 1)代码繁琐: 2)只能够支持map和reduce方法: 3)执行效率低下: 4)不适合迭代多次.交互式.流式的处理:   框架多样化: 1)批处理(离线):MapRed ...

  10. 面向对象一 OOP与类

    OOP面向对象 面向对象与面向过程 面向过程让计算机有步骤的顺次做一件事情,是一种过程化的叙事思维:面向对象是一种计算机世界里解决复杂软件工程的方法论,拆解问题复杂度,从人类思维角度提出解决问题的步骤 ...