【发布时间】:2019-04-30 12:51:25
【问题描述】:
我需要模拟所需的类并获得所需的日期结果。
我已经尝试在 DateFormat 类中模拟 format() 函数,但没有成功。
class XYZ {
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
public void buildStr(StringBuilder str){
DATE_FORMAT.setTimeZone(UTC);
Date date = getDate();
str.append(DATE_FORMAT.format(date));
}
private Date getDate(){
return new Date();
}
}
在这段代码中,我希望星号附加“20190430000000”(正是这个值) 但我得到的是当前的 UTC 时间。
【问题讨论】:
-
不,您不需要模拟 DateFormat、SimpleDateFormat 或 Date。你甚至不应该使用 SimpleDateFormat。你应该有一个
Clock,你可以通过Clock.fixed(...)轻松模拟/创建虚拟实例。 -
您是想用标题中指示的模拟编写测试,还是只想创建一个具有固定日期的
Date实例? -
我见过类似的堆栈溢出问题,但无法在我的场景中复制它们。
-
@AnkitGupta 你用的是什么java版本?
-
您的示例显示完全零模拟,显然您不能模拟任何东西。它还没有显示任何可以实现目标的代码。另一件事:那不是单元测试。我认为您需要从头开始......也许可以尝试编译并运行一个 hello-world 应用程序并遵循有关编程的教程。
标签: java unit-testing junit mockito powermockito