即使我编写自己的currentTimeMillis方法,如何逃离TimeStamp?

时间:2012-08-14 08:34:53

标签: grails timestamp

我有一个这样的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功能进行单独测试?

提前致谢。

2 个答案:

答案 0 :(得分:1)

new Date()核心库中的Java代码不会也不会在Groovy元类代码中获取您的更改。

我建议您使用joda-time(使dateCreated成为DateTime)和setting current time by its means

更好的方法是不要将代码绑定到当前时间,而是将时间从外部传入您的课程。

答案 1 :(得分:0)

不要使用'dateCreated',grails会自动为你填写。