Grails: установка компонента источника данных в контексте приложения в модульных тестах

Я использую grails 3.2.7, и я тестирую модуль, который имеет следующие строки кода:

void abc(){
ApplicationContext ctx = Holders.grailsApplication.mainContext
def dataSource = ctx.getBean('dataSource')
}

Внутри модульного теста (JUnit) кто-нибудь может мне помочь с: Как установить компонент "источник данных" в applicationContext?

Я пытался:

applicationContext.beanFactory.registerSingleton("dataSource", DataSource)

Но это не работает. Кто-нибудь может мне здесь помочь?


person Charu Jain    schedule 10.07.2017    source источник


Ответы (2)


Итак, решение:

Внутри класса Junit Test:

Class TestCl {
    DataSource dataSource

      @Before
      public void setup() {
        defineBeans {
          def bb = new BeanBuilder()
          bb.beans {
            dataSource(BasicDataSource)
          }
        }
        applicationContext.beanFactory.registerSingleton("dataSource", dataSource)
       }
     }
person Charu Jain    schedule 10.07.2017

Вместо того, чтобы проходить через контекст приложения, я бы предложил использовать внедрение зависимостей для получения bean-компонента dataSource.

Вы можете сделать следующее:

Class SampleService {
   def dataSource

   def abc(){
     //do the thing with the dataSource!
   }
}

Кроме того, я думаю, вам нужен Integration Test вместо Unit test, чтобы на самом деле проверить логику устойчивости. См. это

person Vivek    schedule 10.07.2017