Inject Services in Grails Unit Test

Я знаю, что вы можете просто ввести услугу в метод unit test, используя:

defineBeans {
   someService(SomeService)
}

Но когда мне нужно внедрить сервис внутри службы (служба someService вызывает себе другую службу some2Service). Когда я запускаю тест с приведенным выше кодом, я получаю:

Message: Cannot invoke method someMethod() on null object

Можно ли внедрить услугу в службу в unit test?

Спасибо.; -)

Ответ 1

Чтобы использовать spring beans в unit test, вам необходимо сделать следующее:

  • Включите все службы и другие beans, в зависимости от того, в чем проблема с телом defineBeans.
  • Задайте для свойства autowire значение true для beans, для которого требуется добавить другой beans.

Например:

defineBeans {
    someService(SomeService) { bean ->
        bean.autowire = true
    }
    some2Service(Some2Service)
}

Ответ 2

вы можете установить свою переменную-член, которая является службой, используя ref

MyService(MyProvider) {
        userDetailsService = ref("userDetailsService")
        springSecurityService = ref("springSecurityService")
        userService = ref("userService")
    }

Надеюсь, что поможет