模拟 java.time.format.DateTimeFormatter 类

时间:2023-05-04
本文介绍了模拟 java.time.format.DateTimeFormatter 类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我正在尝试模拟 DateTimeFormatter 类.我做了以下事情:

I'm trying to mock the DateTimeFormatter class. I've done the following:

@RunWith(PowerMockRunner.class)
@PrepareForTest({DateTimeFormatter.class})
public class UnitTest {

private DateTimeFormatter mockDateFormatter;

private AwesomeClass awesomeClass;

@Before
public void setUp() {
    mockDateFormatter = PowerMockito.mock(DateTimeFormatter.class);
    awesomeClass = new AwesomeClass(mockDateFormatter);
}

@Test
public void shouldToTestSomethingAwesome() {
   // Other test code
    PowerMockito.when(mockDateFormatter.format(any(LocalDate.class)))
                    .thenReturn("20150224");
   // Other test code

}

AwesomeClass 使用它来格式化 LocalDateTime.now(ZoneId.of("UTC"));.然后,格式化的字符串进一步用于生成另一个字符串.我需要确保正确生成字符串.所以我需要从格式化程序返回一致的日期或模拟 LocalDateTime.now(..) 静态方法

AwesomeClass uses it to format LocalDateTime.now(ZoneId.of("UTC"));. The formatted string is then further used to generate another string. I need to ensure that the string is properly generated. So I need to return a consistent date from either the formatter or mock the LocalDateTime.now(..) static method

我做错了什么?

推荐答案

模拟 LocalDateTime.now() 的替代方法是将时钟注入您的类并更改(或添加另一个)构造函数像这样:

An alternative to mocking LocalDateTime.now() is to inject the clock into your class and change your (or add another) constructor like this:

AwesomeClass(DateTimeFormatter fmt, Clock clock) {
  //instead of LocalDateTime now = LocalDateTime.now():
  LocalDateTime now = LocalDateTime.now(clock);
}

然后在你的测试中:

new AwesomeClass(formatter, Clock.fixed(the time you want here));

这篇关于模拟 java.time.format.DateTimeFormatter 类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一篇:用 Mockito 模拟重载的方法 下一篇:何时使用 Mockito.verify()?

相关文章