Necesito obtener las dependencias inyectadas en mis objetos de dominio en mis pruebas.Inyectar dependencias en la prueba de especificación de Grails Spock
Estas pruebas se colocan en el directorio de prueba/integración y se extienden desde spock.lang.Specification
.
¿Cómo puedo lograrlo?
Nota: He visto esta publicación How to inject spring beans into spock test, pero no está relacionada con los griales.
Editar:
La dependencia quiero conseguir inyectado es springSecurityService
en mi SecUser
subclase llamada Player
. El método que está fallando es el encodePassword()
, que se llama en el beforeInsert()
.
que pueden burlarse de este método encodePassword()
en algunas pruebas, pero cuando quiero probar mi método controladores save()
, no puede burlarse de la Player
que se está creando, porque todo sucede dentro del método controladores.
Después de cambiar para extender IntegrationSpec
, este es mi código de prueba:
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
}
}
estoy recibiendo esta excepción cuando se ejecuta grails test-app :spock
:
java.lang.NullPointerException: Cannot get property 'mainContext' on null object
at grails.plugin.spock.IntegrationSpec.$spock_initializeSharedFields(IntegrationSpec.groovy)
Y éste cuando corro la prueba por sí sola:
| 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)
'@ AutoWired', tal vez? ¿Se está ejecutando su aplicación Grails cuando ejecuta sus pruebas? – Will
¿Tal vez es una mejor idea burlarse de estas dependencias? ¿Qué dependencias no se inyectan? Escribe un código de ejemplo para mostrar un problema. –
Nunca he intentado usar @Autowired en Grails, lo intentaré. No estoy ejecutando la aplicación cuando ejecuto las pruebas. –