Unit testing 使用grails进行单元测试时javax.sql.DataSource出现问题
我一直在使用javax.sql.DataSource在我的服务中处理sql查询:Unit testing 使用grails进行单元测试时javax.sql.DataSource出现问题,unit-testing,grails,groovy,junit,Unit Testing,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 re
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
那么,这是测试框架的问题还是我遗漏了什么?
我也尝试过类似的情况,但这也引发了“MissingMethodException”
我可以用这些创建单元测试吗,因为集成测试也会出现同样的问题
是否有任何方法可以模拟其中任何一个或隔离数据部分,以便只验证这些方法?我可能很愚蠢,但您的服务的
数据源属性是在何处以及如何构造的?我猜您需要在service=new SomeService()
之后执行此操作,我想我错过了这一步,但即使我确实向测试类添加了javax.sql.DataSource DataSource
,并定义了sql。结果恰好是一样的。您的意思是在service=newsomeservice()
行之后的测试类中做service.datasource=…something…
?我不确定你说“并定义sql”时我是否理解。哦,我想我像service.sql=new-sql(datasource)
一样尝试过,我认为我做的都是错的,但我再次相信我不能像其他任何服务一样模仿它,或者我可以吗?