我正在编写一些代码,以针对当前时间进行日期和时间计算。在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/