gpt4 book ai didi

hibernate - 在单元测试中使用Java 8 Time API的Grails 3.1.1

转载 作者:行者123 更新时间:2023-12-02 14:49:53 25 4
gpt4 key购买 nike

我无法在使用LocalDate类型的字段的单元测试中查询域类。

我试图保留Java 8中引入的日期和时间值(如LocalDate)。Grails3.1.1和Gorm 5是堆栈。我已经关注How to configure Grails 3.1.1 to use Hibernate 5来使用Hibernate 5。

我为日期和时间api的新类型映射添加了compile "org.hibernate:hibernate-java8:5.0.7.Final"。运行该应用程序时效果很好。持久性和负载性是可能的。

另一方面,单元测试会崩溃。例如,使用该域类:

class Event {
String name
LocalDate date
}

和这个单元测试:
void "test criteria with date"() {
when:
def c = Event.createCriteria()
c.list {
eq("date", LocalDate.now())
}.each {
println it
}
then:
true
}

它崩溃与此:
java.lang.IllegalArgumentException: Property [date] is not a valid property of class [localdate.Event]
at grails.gorm.CriteriaBuilder.validatePropertyName(CriteriaBuilder.java:1132)
at grails.gorm.CriteriaBuilder.eq(CriteriaBuilder.java:489)
at localdate.EventControllerSpec.test criteria with date_closure2(EventControllerSpec.groovy:31)
at localdate.EventControllerSpec.test criteria with date_closure2(EventControllerSpec.groovy)
at groovy.lang.Closure.call(Closure.java:426)
at groovy.lang.Closure.call(Closure.java:420)
at grails.gorm.CriteriaBuilder.invokeClosureNode(CriteriaBuilder.java:1157)
at grails.gorm.CriteriaBuilder.list(CriteriaBuilder.java:279)
at grails.gorm.CriteriaBuilder.list(CriteriaBuilder.java:52)
at localdate.EventControllerSpec.test criteria with date(EventControllerSpec.groovy:30)

我的猜测是,在作为单元测试进行测试时,新类型不可用。另一方面,如果测试是作为集成测试完成的,则该测试有效。

我不想被迫在集成测试中测试所有 Controller 逻辑。如何使域类单元可以再次测试?

最佳答案

https://grails.github.io/grails-doc/latest/guide/testing.html#unitTestingDomains中描述的HibernateTestMixin解决了该问题。在上面给出的示例中,我添加了:

@Domain(Event)
@TestMixin(HibernateTestMixin)

您还需要一个额外的依赖项:
testCompile 'org.grails:grails-datastore-test-support:5.0.1.RELEASE'

关于hibernate - 在单元测试中使用Java 8 Time API的Grails 3.1.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com