grails - 在Grails中,有没有一种好的方法可以使用Joda time模拟当前时间?

标签 grails time groovy mocking jodatime

我正在编写一些代码,以针对当前时间进行日期和时间计算。在Joda时代,这是通过(Java)构造函数访问的,因为它是不可变的对象。我需要能够进行模拟,以便new DateTime()返回特定的常量瞬间,以便我可以执行明智的测试断言,但不要理会所有其他DateTime方法。

事实证明这很讨厌。 Grails mockFor(DateTime, true)不会让我模拟Java构造函数,但是没有明显或可读的非构造方法来获取Joda时间。

唯一可用的选项似乎涉及低级JVM技术,例如JMockit或EasyMock 3类模拟,这是Grails的苦恼。是否有简单/直接的方法来实现这一目标?

最佳答案

我们最终使用dateService方法创建了now()。在单元测试中,我们使用

domainInstance.dateService = [ now: { currentTime } ] as DateService

其中currentTime是单元测试类字段。这强加了每个人对dateService的依赖(我们只有近乎全局的依赖),而对于src类,则必须手动传递它。

OTOH,单元测试看起来很清楚。

关于grails - 在Grails中,有没有一种好的方法可以使用Joda time模拟当前时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6130838/

相关文章:

java - 任务定义/gradle中的定义

java - Grails Rendering插件可从云或字符串中转换html/gsp

php - 如何在 PHP 中以毫秒为单位获取当前时间?

groovy - 如何将 jsonbuilder 与集合一起使用?

excel - 在 EXCEL 中如何将 J2000 时间值转换为标准日期和军事时间?

PHP - 从时差中排除所有非工作时间/天

grails - 在 GSP 中使用 JSTL 标签

grails - 在Grails应用程序中从无渲染域类属性插入数据

java - 如果无法解析属性,带有@Value Annotation 的 Grails 3 不会返回 null

grails - Grails GORM/HQL-从关联中检索数据