我有一个这样的inetgration测试用例:
void testSomething() {
def cardTable = new CardStorage();
cardTable.cardSecurityCode = "something"
def date = new Date()
System.metaClass.static.currentTimeMillis = {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,11);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
return date.getTime()
}
assert cardTable.save(flush:true) //this works.
}
行:cardTable.save(flush:true)
正在运行。它断言true
。但问题是dateCreated
字段仍然与(new Date()
)相同。我想知道,这怎么可能发生。因为我按照我的要求编码了currentTimeMillis
方法。但仍然没有grails捡起来。但我确信我的新currentTimeMillis
正在运行(因为在其中出错,导致编译错误)。
我失踪的地方?如何禁用timeStamp功能进行单独测试?
提前致谢。
答案 0 :(得分:1)
new Date()
核心库中的Java代码不会也不会在Groovy元类代码中获取您的更改。
我建议您使用joda-time(使dateCreated
成为DateTime
)和setting current time by its means。
更好的方法是不要将代码绑定到当前时间,而是将时间从外部传入您的课程。
答案 1 :(得分:0)
不要使用'dateCreated',grails会自动为你填写。