Мне нужно внедрить зависимости в объекты моего домена в моих тестах.
Эти тесты находятся в каталоге test/integration и простираются от spock.lang.Specification
.
Как я могу этого добиться?
Примечание. :Я видел этот пост Как внедрить спринг-бины в спок-тест , но он не связан с Grails.
Изменить:
Зависимость, которую я хочу внедрить, это springSecurityService
в моем подклассе SecUser
с именем Player
. Метод, который не работает, — это encodePassword()
, который вызывается в beforeInsert()
.
Я могу имитировать этот метод encodePassword()
в некоторых тестах, но когда я хочу протестировать свой метод контроллеров save()
, я не могу имитировать создаваемый Player
, потому что все это происходит внутри метода контроллеров.
После изменения на расширение 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)