下面的代码片段是Groovy类的单元测试用例代码。
使用maven build在Eclipse Luna中运行此测试用例时会出现以下错误:
错误: [错误] com.double.example.application.appMockTest #testUserList MissingMethodException
你们中的任何一个人都可以对此有所了解吗?如何解决这个问题?
注意:很少有在线讨论,但没有成功。
public void testUserList() {
setup()
def userList = [['name':'12345678', 'actual_name':'Paul allan']]
List<User> tempList = new ArrayList<User>()
mocksql.demand.eachrow {
def query, closure -> userList.each(closure)
}
mocksql.use {
apply1 = new apply1(
<connection string goes here>,
<username>, <password>,
<schemaname>,
"oracle.jdbc.driver.OracleDriver")
tempList = apply1.getapply1UserList()
}
}
}
答案 0 :(得分:0)
听起来你的变量mocksql应该是一个MockFor(Sql),而不是一个真正的Sql对象。
import groovy.sql.Sql
import groovy.mock.interceptor.MockFor
MockFor mocksql = new MockFor(Sql)
mocksql.use {
// ...
}
所以这应该是一个简单的解决方案。
还有一件事:对你的嘲笑要非常小心。你在嘲笑每一个,但是在Sql上没有这样的方法,因为它实际上叫做eachRow。如果您在测试和实际代码中犯了同样的错误,则会隐藏错误。
我在这里输了错误&#34;行&#34;两次和我的测试通过相同的方式:
import groovy.mock.interceptor.MockFor
import groovy.sql.Sql
import groovy.sql.GroovyRowResult
new MockFor(Sql).with {
it.demand.withInstance {a,b,c,d, closure -> closure.call( new Sql() ) }
it.demand.rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrows { query ->
assert query == 'SELECT * FROM Users'
return [['name':'12345678', 'actual_name':'Paul allan']]
.collect { new GroovyRowResult (it) }
}
it.use { assert getUserList() == ['12345678'] }
it.expect.verify()
}
public String[] getUserList () {
Sql.withInstance('url', 'user', 'pass', 'driver') { sql ->
sql.rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrows ('SELECT * FROM Users')
.inject (new ArrayList<String>()) { usernames , result -> usernames << result.name }
}
}