0

我有一个像这样的 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功能正在运行(因为在其中出错,会导致编译错误)。

我在哪里失踪?如何禁用时间戳功能以单独进行测试?

提前致谢。

4

2 回答 2

1

核心库中的 Java 代码new Date()不会也永远不会接受您在 Groovy 元类代码中所做的更改。

我可以推荐使用joda-time (make dateCreateda DateTime) 并通过它的方式设置当前时间

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

于 2012-08-14T09:27:14.193 回答
0

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

于 2012-08-15T00:19:57.327 回答