grails - 在Groovy单元测试中重写JdbcTemplate方法

标签 grails groovy jdbctemplate

免责声明:我知道,集成测试正在进行中,我只需要测试在jdbc查询之后会发生什么;

你好
为grails服务类编写一些单元测试,关于一个包含对jdbcTemplate.query(string sql,Object [] params,RowMapper rm)的调用的方法,我有一个小问题

为了测试查询后会发生什么,我需要提供一个虚拟值。在先前的测试中,我能够使用来覆盖queryForList:

Service service = new Service()
def jdbcTemplate = [queryForList : {q, o -> return [1,2,3]}] as JdbcTemplate
service.setJdbcTemplate(jdbcTemplate);

没有任何问题。但是,对于查询方法,没有成功。用
def jdbcTemplate = [query : {q, o, rm -> 'dummy'}] as JdbcTemplate
def jdbcTemplate = [query : {String q, Object[] o, RowMapper rm -> 'dummy'}] as JdbcTemplate
def jdbcTemplate = [query : {String q, Object o, RowMapper rm -> 'dummy'}] as JdbcTemplate

都失败了
groovy.lang.MissingMethodException: No signature of method: 
JdbcTemplate_groovyProxy.query() is applicable for argument types: 
(java.lang.String, java.util.ArrayList, com.sun.proxy.$Proxy6) 
values: [select something from something where id = ? , [1], Service$_method_closure1@16aca316]
Possible solutions: query(java.lang.String, org.springframework.jdbc.core.ResultSetExtractor), 
query(java.lang.String, [Ljava.lang.Object;, org.springframework.jdbc.core.ResultSetExtractor), 
query(java.lang.String, org.springframework.jdbc.core.PreparedStatementSetter, 
org.springframework.jdbc.core.ResultSetExtractor), query(java.lang.String,
org.springframework.jdbc.core.ResultSetExtractor, [Ljava.lang.Object;), 
query(java.lang.String, org.springframework.jdbc.core.RowMapper), 
query(java.lang.String, [Ljava.lang.Object;, 
org.springframework.jdbc.core.RowMapper)

有什么提示吗?还是我在这里做的事情真的很糟糕? (我是groovy的新手)
谢谢。

最佳答案

即使您正在尝试使用 map 强制执行此操作,我仍建议为此使用Spock Framework

重写以编写测试的Specification类包含MockStub方法,因此您可以执行以下操作:

def mockJdbc = Mock( JdbcTemplate ) {
    query(_, _, _) >> 'DUMMY'
}

这甚至应该为您提供正确的错误消息,以便您可以更轻松地找出问题所在。

关于grails - 在Groovy单元测试中重写JdbcTemplate方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289081/

相关文章:

java - 外部化 Grails 应用程序的运行配置

grails - 有什么方法可以覆盖默认的 Camel FatalFallbackErrorHandler 吗?

java - SQL批量更新保证顺序?

spring - 在 Spring 3.0 中使用 jdbcTemplate 时出现空指针异常

java - 使用 JdbcTemplate.update() 执行存储过程是一个好习惯吗?

javascript - Grails:多个 onload ajax 调用,但只有一个打印到控制台

grails - Groovy/Grails 默认错误信息

java - 如何在 grails 中获取数据库实例?

android - 什么是委托(delegate)对象?

groovy - Groovy 中 Map 的奇怪行为