我如何创建一个Sql模拟单元测试Grails

时间:2018-02-02 19:21:49

标签: sql unit-testing testing grails

我试图对Grails进行单元测试,我尝试过的内容如下:

def getMarca(CrDocumento crDocumento) {
    if (!crDocumento) {
        return null
    }
    String sql = ""

    sql = "select marca.id as marca_id from cr_documento, matricula, cr_renegoc_boleto, oferta_polo_turma, oferta_polo, oferta, marca where cr_documento.id = cr_renegoc_boleto.cr_documento_id and cr_documento.matricula_id = matricula.id and matricula.oferta_polo_turma_id = oferta_polo_turma.id and oferta_polo_turma.oferta_polo_id = oferta_polo.id and oferta_polo.oferta_id = oferta.id and oferta.marca_id = marca.id and cr_documento.id = $crDocumento.id"

    def sqlGroovy = new Sql(dataSource)
    def marcaId = sqlGroovy.firstRow(sql)?.marca_id
    return Marca.findById(marcaId)
}

但我无法模拟Sql Class并看到此错误:

  

groovy.lang.GroovyRuntimeException:方法groovy.sql.Sql#的模糊方法重载。

     

由于以下原因重叠原因,无法解析为[null]调用哪个方法:       [interface java.sql.Connection]
      [interface javax.sql.DataSource]

2 个答案:

答案 0 :(得分:0)

查询id的代码应该在一个单独的服务中,然后你可以模拟。

答案 1 :(得分:0)

从此Forum

  

服务/数据源定义必须在方法之外进行。   然后Spring会注入豆子。

尝试这样的事情:

FooController { 
        def dataSource_mydb 

        def barAction() { 
                def sql = new Sql(dataSource_mydb) 
        } 
}