#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)
, я думал, что делаю все это неправильно, но опять же, я считаю, что я не мог просто издеваться над этим, как над любым другим сервисом, или я мог?