我遇到了一个问题,即扩展 HibernateSpec 的单元测试由于 sessionFactory
而失败。没有被注入(inject)到被测服务中。每当 sessionFactory
上的方法在测试期间被调用,我得到一个 NullPointerException
(例如 java.lang.NullPointerException: Cannot invoke method getClassMetadata() on null object
)并且测试随后失败。
我正在使用 Grails 3.2.4 和 Hibernate 5。
当测试使用 @TestMixin(HibernateTestMixin)
时,这是有效的,但看起来有一些更新,mixin 已被弃用并建议使用 HibernateSpec
反而。
这是我测试的一个片段:
class TestDatabaseServiceSpec extends HibernateSpec {
def setup() {
}
def cleanup() {
}
void "test method"() {
when:
service.method()
then:
true
}
}
这是被测服务的一个片段:
void method() {
...
TABLE_NAMES.add(sessionFactory.getClassMetadata('MyDomain').tableName)
...
}
我试图设置
service.sessionFactory
在 setup
方法以及setupSpec
使用 sessionFactory
的方法在测试中可用,但不幸的是这并没有帮助。我曾考虑过使用集成测试,但我真的很想看看我是否可以像以前一样继续让这个单元测试工作。有谁知道我做错了什么,或者是否有解决方法/解决方案?谢谢!
最佳答案
查看HibernateSpec
的源代码可以给出一些提示。可能没有getSessionFactory()
您正在使用的 Hibernate 5 grails 插件中的方法。
我正在使用 org.grails.plugins:hibernate5:6.0.6
使用 grails 3.2.5 和 sessionFactory 在单元测试中对我来说不是空的。
我了解并非总是可以升级,但它可以让您了解问题的根源是什么。
更新:
service.sessionFactory = sessionFactory
也必须在测试设置中调用。
关于grails - 为什么没有为使用 Grails 3.2 的单元测试注入(inject) sessionFactory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801766/