我试图测试一个使用Criteria查询来计算匹配对象的方法。这使用我的Reservation
域类,该类具有org.joda.time.DateTime
class Reservation {
Organization organization
DateTime dateTime
//...
int countPending(Organization org) {
Reservation.createCriteria().count() {
eq("organization", org)
gte("dateTime", new DateTime())
// ...
}
}
}
以下是我用来测试该方法的规范:
@TestFor(Reservation)
class ReservationSpec extends Specification {
def "countPending should return the number of pending reservations"() {
// ...
expect:
Reservation.countPending(org) == 0;
}
}
当我尝试运行测试时,我得到:
java.lang.IllegalArgumentException: Property [dateTime] is not a valid property of class [Reservation]
我怀疑这是因为DateTime既不是原始类型也不是域对象,而且模拟域对象的代码并不知道如何处理它。为了在应用程序中运行此代码,我们使用自定义用户类型映射(org.joda.time.contrib.hibernate.PersistentDateTime
)。
有没有办法让域名模拟代码知道DateTime,还是以其他任何方式使这个可测试?
编辑:将@Mock([Reservation])
更改为@TestFor(Reservation)
- 结果相同。