1

我需要在测试中的某个日期设置系统时钟。这样,我必须在测试中模拟该日期发生的行为。我发现这篇文章http://www.javapractices.com/topic/TopicAction.do?Id=234

但它并没有给你太多提示如何设置假系统时钟,例如 2.5.2013。

请帮我。

4

3 回答 3

2

假设您需要为测试操纵时间而不是真正更改系统时钟...考虑使用Joda-Time,这具有内置的功能,例如:

// always return the same time when querying current time
DateTimeUtils.setCurrentMillisFixed(millis);

// then test 
assert new DateTime().getMillis() == millis;

// reset time
DateTimeUtils.setCurrentMillisSystem() 

不过,您必须权衡使用 Joda-Time 和自己实施解决方案之间的权衡!

于 2013-03-04T11:57:15.917 回答
0

一般来说,操纵系统日期时间不是一个好习惯,我仍然记得每次运行单元测试时我的前景如何变得疯狂以及过去的各种提醒如何弹出。

您可以创建一个静态类,该类根据环境返回日期时间,因此在测试环境中。它将允许设置您可以在实际运行时访问的日期时间,它将返回系统日期/时间。

于 2013-03-04T11:50:18.507 回答
0

但它并没有给你太多提示如何设置假系统时钟,例如 2.5.2013。

确实如此。我想您按照这些步骤操作并用接口替换了所有对系统时间的调用(TimeSource例如)。如果您需要模拟特定日期,您可以在测试类中使用以下实现:

public final class TestTimeSrc implements TimeSource {

  public long currentTimeMillis() {
     Calendar calendar = Calendar.getInstance();
     calendar.set(2013, 4, 2);
     return calendar.getTime().getTime();
  }
} 
于 2013-03-04T11:50:50.803 回答