Unit testing 使用grails进行单元测试时javax.sql.DataSource出现问题

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

我一直在使用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
那么,这是测试框架的问题还是我遗漏了什么? 我也尝试过类似的情况,但这也引发了“MissingMethodException”

我可以用这些创建单元测试吗,因为集成测试也会出现同样的问题


是否有任何方法可以模拟其中任何一个或隔离数据部分,以便只验证这些方法?

我可能很愚蠢,但您的服务的
数据源
属性是在何处以及如何构造的?我猜您需要在
service=new SomeService()
之后执行此操作,我想我错过了这一步,但即使我确实向测试类添加了
javax.sql.DataSource DataSource
,并定义了sql。结果恰好是一样的。您的意思是在
service=newsomeservice()
行之后的测试类中做
service.datasource=…something…
?我不确定你说“并定义sql”时我是否理解。哦,我想我像
service.sql=new-sql(datasource)
一样尝试过,我认为我做的都是错的,但我再次相信我不能像其他任何服务一样模仿它,或者我可以吗?