テストのドメイン オブジェクトに注入された依存関係を取得する必要があります。
このテストは test/integration ディレクトリに置かれ、spock.lang.Specification
.
どうすればこれを達成できますか?
注: この投稿How to inject spring beans into spock testを見たことがありますが、grails とは関係ありません。
編集:
注入したい依存関係はspringSecurityService
、SecUser
というサブクラスにありPlayer
ます。失敗しているメソッドは でencodePassword()
、 で呼び出されますbeforeInsert()
。
一部のテストでこのencodePassword()
メソッドをモックできますが、コントローラー メソッドをテストしたい場合、作成中の をsave()
モックするPlayer
ことはできません。これはすべてコントローラー メソッド内で行われるためです。
extend に変更した後IntegrationSpec
、これが私のテスト コードです。
package intertigre.test.domain
import intertigre.domain.Fecha;
import intertigre.test.util.DomainFactoryTestService
import grails.plugin.spock.IntegrationSpec
import grails.test.mixin.TestFor
@TestFor(Fecha)
class FechaSpec extends IntegrationSpec{
DomainFactoryTestService domainFactoryTestService = new DomainFactoryTestService()
def 'test'(){
given:
def fecha = new Fecha()
when:
fecha.save()
then:
Fecha.get(1) == fecha
}
}
実行中にこの例外が発生しますgrails test-app :spock
:
java.lang.NullPointerException: Cannot get property 'mainContext' on null object
at grails.plugin.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy)
そして、これは私が単独でテストを実行したときのものです:
| Failure: intertigre.test.domain.FechaSpec
| java.lang.NullPointerException: Cannot get property 'autowireCapableBeanFactory' on null object
at grails.plugin.spock.IntegrationSpec.setupSpec(IntegrationSpec.groovy:47)
| Failure: intertigre.test.domain.FechaSpec
| java.lang.NullPointerException: Cannot invoke method isActive() on null object
at grails.test.mixin.support.GrailsUnitTestMixin.shutdownApplicationContext(GrailsUnitTestMixin.groovy:232)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:176)
at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:176)