【问题标题】:How to mock Jodatime DateTime with Mockito [duplicate]如何用 Mockito 模拟 Jodatime DateTime [重复]
【发布时间】:2017-09-15 23:43:10
【问题描述】:

我目前正在尝试模拟一个 DateTime 对象,以便在每次在我的测试中创建一个新的 DateTime 对象时拦截它并使其创建一个常量(预定的)DateTime 对象。

在我的实际方法中,我正在创建这样的 DateTime 对象:

DateTime start = new LocalDateTime().toDateTime().minusHours(1)

DateTime end = new LocalDateTime().toDateTime()

现在,我正在模拟 LocalDateTime 对象和 DateTime 对象,但不知道如何进行:

@Mock
DateTime dt;

@Mock
LocalDateTime ldt;

@Test
public void test() {
    when(new DateTime()).thenReturn( ???? ); // Stuck here.
    when(new LocalDateTime().toDateTime()).thenReturn(dt);
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: java junit mockito jodatime


    【解决方案1】:

    您不能使用 Mockito 模拟静态方法调用(或构造函数调用);您可以使用 Powermock,但这可能是错误的方法。

    您可能需要考虑使用DateTimeUtils.setCurrentMillis* methods 来控制Jodatime 的当前时间概念。例如,您可以固定时间。这样做的缺点是它正在改变全局状态,因此可能会产生意想不到的效果;您还需要确保在测试后重置当前的毫秒提供程序。

    但是,更好的解决方案是使用依赖注入,因此您将 something 注入到被测类中,这样您就可以创建 DateTime 的实例,例如Supplier<DateTime>,因此您调用非静态 supplier.get() 而不是 new DateTime()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 2018-10-08
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多