免责声明:我知道,集成测试正在进行中,我只需要测试在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
类包含Mock
和Stub
方法,因此您可以执行以下操作:
def mockJdbc = Mock( JdbcTemplate ) {
query(_, _, _) >> 'DUMMY'
}
这甚至应该为您提供正确的错误消息,以便您可以更轻松地找出问题所在。
关于grails - 在Groovy单元测试中重写JdbcTemplate方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289081/