Groovy тестирование groovy.sql.Sql - MockSql - PullRequest
0 голосов
/ 30 апреля 2019

Нужна помощь насмешки sql.eachRow ().

У меня есть служба, которую я хотел бы проверить, а именно:

class MyService {
def dataSource

def method1(id) {
    def map = [:]
    def sql = new Sql(dataSource)
    def queryString = 'select col1, col2 from tbl_1 where id = ?
    sql.eachRow(queryString, [1]) { row ->
        map.put(row.val1, row.val2)
    }
    return map
}

}

Я пытаюсь проверить это с помощью MockFor

Код:

class MyServiceTest extends Specification {
@Test
def "test method1"() {
    setup:
    def row = [:]
    row["col1"] = "1"
    row["col2"] = "val1"
    def mockResult = [row]

    Sql.metaClass.constructor = {dataSource -> return new MockSql("") }
    def mockSql = new MockFor(Sql.class)
    mockSql.demand.newInstance { def datasource ->
        return mockSql
    }
    mockSql.demand.eachRow { def arg1, def arg2, closure ->
        // run the closure over the mock array
        mockResult.each(closure)
    }

    when:
    def result = service.method1(1)

    then:
    result == ["1":"val1"]
}

}

Получение приведенной ниже ошибки с типами аргументов earRow

No signature of method: com.kenexa.assess.MockSql.eachRow() is applicable for argument types: (java.lang.String, java.util.ArrayList, xyz_closure103) values: [select col1, col2 from tbl_1 where id = ?]
Possible solutions: eachRow(java.lang.Object, groovy.lang.Closure)
groovy.lang.MissingMethodException: No signature of method: com.kenexa.assess.MockSql.eachRow() is applicable for argument types: (java.lang.String, java.util.ArrayList, xyz_closure103) values: [select col1, col2 from tbl_1 where id = ?]
Possible solutions: eachRow(java.lang.Object, groovy.lang.Closure)
...