我如何模拟 java.time.LocalDate.now()

2023-11-22

在我的测试用例中,我需要测试时间敏感的方法,在该方法中我们使用 java 8 类 LocalDate,它是not Joda.

当我运行测试时,我可以做什么来改变时间


在您的代码中,替换LocalDate.now() with LocalDate.now(clock);.

然后你可以通过Clock.systemDefaultZone()用于生产和一个固定的时钟供测试用。


这是一个例子:

首先,注入Clock。如果您使用的是 Spring Boot,只需执行以下操作:

@Bean
public Clock clock() {
    return Clock.systemDefaultZone();
}

二、打电话LocalDate.now(clock)在你的代码中:

@Component
public class SomeClass{

    @Autowired
    private Clock clock;

    public LocalDate someMethod(){
         return LocalDate.now(clock);
    }
}

现在,在您的单元测试类中:

// Some fixed date to make your tests
private final static LocalDate LOCAL_DATE = LocalDate.of(1989, 01, 13);

// mock your tested class
@InjectMocks
private SomeClass someClass;

//Mock your clock bean
@Mock
private Clock clock;

//field that will contain the fixed clock
private Clock fixedClock;


@Before
public void initMocks() {
    MockitoAnnotations.initMocks(this);

    //tell your tests to return the specified LOCAL_DATE when calling LocalDate.now(clock)
    fixedClock = Clock.fixed(LOCAL_DATE.atStartOfDay(ZoneId.systemDefault()).toInstant(), ZoneId.systemDefault());
    doReturn(fixedClock.instant()).when(clock).instant();
    doReturn(fixedClock.getZone()).when(clock).getZone();
}

@Test
public void testSomeMethod(){
    // call the method to test
    LocalDate returnedLocalDate = someClass.someMethod();

    //assert
    assertEquals(LOCAL_DATE, returnedLocalDate);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我如何模拟 java.time.LocalDate.now() 的相关文章

随机推荐

  • 在 Mac (Yosemite) 上使用 phantomjs#2.0.0 运行 casperjs 时出现问题

    我正在尝试奔跑CasperJS having PhantomJS 2 0 0 on a Mac 优胜美地 当尝试跑步时CasperJS我收到以下消息 CasperJS needs PhantomJS v1 x usr local Cella
  • Android 设备上的低功耗蓝牙 RSSI 会定期更改

    我注意到 Android 上接收到的低功耗蓝牙信号强度随周期变化 下图表示一个 BLE 信标在两分钟内的 RSSI 值 接收机器人和信标均处于静止状态 距离均为 1 米 我确保干扰尽可能低 Android 是 Nexus 5 但我在其他 A
  • 使用 jQuery 最小化/最大化 div

    我基本上想最小化一些 div 我不想使用 和 而是想使用一些符号 来自 font awesome 来最小化和最大化 div 我对此的问题 如何在这段代码中插入图标 的类 我尝试用 attr 替换 html 部分 但这没有成功 多谢 Upda
  • 如何在 OnCompleteListener Firebase 中使用异步/等待/协程

    我正在构建一个客户端应用程序 它使用 Firebase 来做两件事 用户认证 使用实时数据库 我已成功在客户端和后端服务器上正确设置所有内容 使用 Firebase 的 Admin SDK 并且能够正确验证用户身份并允许他们读取 写入数据库
  • 哪些代码控制 WPF 应用程序的启动?

    更具体地说 我怎样才能设置像这样的启动顺序在 WPF 中 启动时不显示窗口 但存在通知图标 要运行 WPF 需要Application目的 当你执行时Run在该对象上 应用程序进入无限循环 事件循环负责处理用户输入和任何其他操作系统信号 换
  • 为什么运行一次(并且从未加载)的 Meteor 应用程序的数据库占用了近 3GB?

    UPDATE 这个问题在 Meteor v0 4 2012 之后得到了修复 出于历史目的 摘自du 2890768 Code Meteor QuarterTo meteor local db journal 2890772 Code Met
  • Dask read_csv 失败,而 pandas 则失败

    尝试使用 dask 的read csv在文件中 pandas 的位置read csv像这样 dd read csv data ecommerce new csv 失败并出现以下错误 pandas errors ParserError Err
  • 使用子类对象访问超类函数

    我有一个扩展其超类的子类对象 子类中有一个重写的方法 可以使用该对象调用 是否可以使用子类对象调用超类的函数 package supercall public class Main public static void main Strin
  • 如何编写可以运行 x86 十六进制代码的 C 程序

    我有一组十六进制代码 可以转换为汇编指令 我想用 C 语言创建可以执行这些指令的程序 unsigned char rawData 5356 0x4C 0x01 0x0A 0x00 0x00 0x00 0x00 0x00 0x64 0x0C
  • 如何在 php 中从 .doc 模板创建 word .doc 文件

    我需要从Word模板创建一个Word文档 就像我们需要用值替换模板中的几个字符串 比如变量 请告诉我们如何在 PHP 或 cakePHP 中做到这一点 我建议查看 phpLiveDocx http www phplivedocx org 还
  • 存储指令是否会在缓存未命中时阻塞后续指令?

    假设我们有一个具有两个核心 C0 和 C1 的处理器和一个从地址开始的高速缓存行k最初由 C0 拥有 如果 C1 在第 8 行的 8 字节槽上发出存储指令k 这会影响 C1 上执行的以下指令的吞吐量吗 intel优化手册有如下一段 当指令将
  • Java 的接口优势

    我的问题很简单 如果接口由单个类实现 那么使用接口有什么优势吗 我一直认为只有当接口有多个实现时 接口才是好的 Thanks 一句话 不 接口所表示的契约可以直接在您唯一的类中指定 如果您清楚将来不需要相同方法的另一个实现 则可以避免定义接
  • 选择框选项上的工具提示

    我有一个选择框 其中选项具有策略名称 我需要在选项的工具提示中显示策略的描述 我尝试了tipr插件 其中使用了data tip选项 它适用于 div span 等 但不适用于选择框选项 我还尝试了上面链接中附加的正常方法 仅当下拉列表默认打
  • .NET 5 GRPC 客户端调用引发异常:在未启用 HTTP/2 的情况下使用版本策略 RequestVersionOrHigher 请求 HTTP 版本 2.0

    这是我的第一个 gRPC 应用程序 我尝试从 NET 5 gRPC 客户端 Grpc Net Client 2 35 0 调用服务器流式 RPC 调用 这会在我的本地开发环境中导致以下异常 Grpc Core RpcException 状态
  • 如何在google v8(和nodejs)中渲染32位unicode字符

    有谁知道如何在谷歌v8 驱动谷歌浏览器和nodejs的javascript虚拟机 中渲染unicode 星体平面 字符 其CID超出0xffff 有趣的是 当我给google chrome 它标识为11 0 696 71 在ubuntu 1
  • 如何使用 FieldValue.serverTimestamp() 在 android 中自定义模型类

    我使用 Firestore 作为数据库 现在我想在用户注册时存储服务器时间戳 来自 Firestore 文档 Map
  • 使用 jquery 增加和减少输入值

    单击 和 按钮时我需要增加和减少输入的值 但它似乎不起作用 我从这篇文章中得到了代码 如何使用 jQuery 增加数量字段的值 单击添加按钮时 我插入了一条 console log 语句以进行调试 令人惊讶的是 即使我单击了 id 为 ad
  • 分布式作业调度、管理和报告

    我最近玩了Hadoop它对 MapReduce 作业的调度 管理和报告印象深刻 它似乎使新作业的分配和执行变得非常无缝 使开发人员能够专注于其作业的实施 我想知道Java领域中是否存在一些对于作业的分布式执行来说不容易表达为MapReduc
  • RandomNumber 方法每次调用都返回相同的数字

    每次从 for 循环中调用 RandomNumber 方法时 我都尝试生成不同的随机数 现在 它每次都返回相同的数字 这是我的 RandomNumber 方法 private int RandomNumber int min int max
  • 我如何模拟 java.time.LocalDate.now()

    在我的测试用例中 我需要测试时间敏感的方法 在该方法中我们使用 java 8 类 LocalDate 它是not Joda 当我运行测试时 我可以做什么来改变时间 在您的代码中 替换LocalDate now with LocalDate