Wstrzykiwanie zależności w teście Grails Spock Specification
W testach muszę uzyskać zależności wstrzykiwane w obiekty mojej domeny.
Testy te są umieszczane w katalogu test / integration i rozszerzają się zspock.lang.Specification
.
Jak mogę to osiągnąć?
Uwaga: widziałem ten postJak wstrzyknąć ziarna wiosenne do testu spock, ale nie ma to związku z Graalem.
Edytować:
Zależność, którą chcę wstrzyknąć, tospringSecurityService
w moimSecUser
podklasa o nazwiePlayer
. Metoda, która zawodzi, to metodaencodePassword()
, który nazywa się wbeforeInsert()
.
Mogę z tego kpićencodePassword()
metoda w niektórych testach, ale gdy chcę przetestować moją metodę kontrolerówsave()
, Nie mogę kpić zPlayer
który jest tworzony, ponieważ wszystko dzieje się wewnątrz metody kontrolerów.
Po zmianie na rozszerzenieIntegrationSpec
, to jest mój kod testowy:
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
}
}
Otrzymuję ten wyjątek podczas uruchamianiagrails test-app :spock
:
java.lang.NullPointerException: Cannot get property 'mainContext' on null object
at grails.plugin.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy)
A ten, gdy przeprowadzam sam test:
| 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)