私は、テスト中のサービスにsessionFactory
が注入されていないため、HibernateSpecを拡張する単体テストが失敗しているという問題が発生しています。テスト中にsessionFactory
のメソッドが呼び出されると、NullPointerException
(たとえばjava.lang.NullPointerException: Cannot invoke method getClassMetadata() on null object
)となり、テストは失敗します。私はGrailsの3.2.4を使用していますし、5Grails 3.2を使用してユニットテスト用にsessionFactoryを注入しないのはなぜですか?
を休止テストは@TestMixin(HibernateTestMixin)
を使用したときにこれが働いていたが、一部の更新で、ミックスインは廃止し、代わりに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)
...
}
私はsetup
方法と同様にsetupSpec
方法でservice.sessionFactory
を設定しようとしていますテストではsessionFactory
が利用可能ですが、残念ながらそれは役に立たなかったのです。私は統合テストを使用することを考えましたが、以前と同じようにこの単体テスト作業を継続できるかどうかを本当に見たいと思います。誰かが私が何かを間違ってやっているのか、これに対する回避策/解決策があるのか知っていますか?
ありがとうございました!
Grailsのその上で明示的にテストがあります。https://github.com/grails/gorm-hibernate5/blob/96cef6c569951f39b92715bb369056468b975535/grails-plugin/src/test/groovy/grails/test/mixin/hibernate/HibernateSpecSpec.groovy @Entity(MyDomain)注釈をスペッククラスに追加しようとすると、何らかのトリガーが働いて動作する可能性があります。 – bassmartin
@bassmartinお返事ありがとうございます。注釈に値属性がないので、@Entity(MyDomain)は機能しません。また、(MyDomain)を使わずに試したところ、同じエラーが発生しました。 – Nick