【问题标题】:Tests against an api which uses LocalDateTime针对使用 LocalDateTime 的 api 进行测试
【发布时间】:2016-05-24 14:05:52
【问题描述】:

我必须针对内部使用 LocalDateTime.now() 的 api 编写一些测试,用这个值做一些事情并返回一个相当长的字符串 (~1MB)。

我想编写一些回归测试,以确保即使有新版本的 api 出现,结果也是一样的。

遗憾的是,每次测试结果都不同,因为LocalDateTime.now() 总是返回不同的值(惊喜、惊喜……)

是否有可能以某种方式将LocalDateTime.now() 的结果固定为硬编码值。

由于它只需要在某些单元测试中工作,因此也欢迎使用肮脏的解决方案。

【问题讨论】:

  • 当然。如果您在测试中从对 LocalDateTime.now 的调用中减去 API 的结果,结果应该是一致的。
  • 那不可能。该 api 不只是返回 LocalDateTime 而是做了很多事情来创建新数据,这些数据取决于 now() 值。我将不得不重新实现测试站点上的所有内容。
  • 那么您将不得不编辑您的问题并更详细地解释 API 的输入和输出。
  • 你使用java.time.LocalDateTime还是org.joda.time.LocalDateTime
  • java.time.LocalDateTime

标签: java datetime time


【解决方案1】:

选项 1:使用 Powermock 模拟静态方法

您可以通过模拟静态方法并在每次调用它时返回正确的对象来做到这一点。

 @PrepareForTest(LocalDateTime.class) //This is added added at test class
 PowerMockito.mockStatic(LocalDateTime.class);
 Mockito.when(LocalDateTime.now()).thenReturn(firstLocalDateTime);
 Mockito.when(LocalDateTime.now()).thenReturn(secondLocalDateTime);

https://github.com/jayway/powermock/wiki/MockitoUsage#mocking-static-method

选项 2 将调用包装在一个无需使用 powermock 即可模拟的方法中。

【讨论】:

  • 您必须使用PowerMockito,因为LocalDateTime 是最终类。
猜你喜欢
  • 2011-03-26
  • 1970-01-01
  • 2011-02-06
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 1970-01-01
相关资源
最近更新 更多