Проблема с javax.sql.DataSource при модульном тестировании с grails

#unit-testing #grails #groovy #junit

#модульное тестирование #grails #groovy #junit

Вопрос:

Я использую javax.sql.DataSource для обработки sql-запросов в своих сервисах:

 class SomeService {  
    javax.sql.DataSource datasource

    def someFoo(foo) {
        def sql = new Sql(dataSource)
        def query = "SELECT DISTINCT * FROM someDomain WHERE FOO = ${foo}"
        def result = sql.rows(query)
        return result
    }  
}
  

И я создал несколько модульных тестов для сервисов

 class SomeServiceTests extends GrailsUnitTestCase {
    def service

    protected void setUp() {
        super.setUp()
        service = new SomeService()
    }

    def testSomeFoo() {
        service.datasource = new javax.sql.DataSource
        def result = service.someFoo("foo")
        assertNotNull result
    }
}
  

Я считаю, что мои сервисы работают хорошо.
Но в результате теста я получаю следующую ошибку :

  Caused an ERROR
Must specify a non-null Connection
java.lang.NullPointerException: Must specify a non-null Connection
  

итак, это проблема с платформой тестирования или я что-то здесь упускаю?
Я также пробовал аналогичную ситуацию с ExecuteQuery, но это тоже выдает «Исключение missingmethod».

Могу ли я создавать модульные тесты с их помощью, поскольку такая же проблема возникла и с интеграционными тестами?

Есть ли какой-либо способ, которым я мог бы издеваться над любым из них или изолировать части данных, чтобы просто проверить методы?

Комментарии:

1. Возможно, я веду себя глупо, но где и как создается datasource атрибут вашего сервиса? Я предполагаю, что вам нужно будет сделать это после service = new SomeService()

2. Думаю, я пропустил это, но даже если я добавлю javax.sql.DataSource datasource в тестовый класс и определю sql. Результат оказывается тем же самым.

3. вы имеете в виду делать service.datasource = ...something... в вашем тестовом классе после service = new SomeService() строки? Не уверен, что понимаю, когда вы говорите «и определите sql»

4. упс, я думаю, что я пробовал это так service.sql = new Sql(datasource) , я думал, что делаю все это неправильно, но опять же, я считаю, что я не мог просто издеваться над этим, как над любым другим сервисом, или я мог?