【发布时间】:2023-03-26 05:40:01
【问题描述】:
我有一个奇怪的用例,当我没有在“then:”部分检查模拟类的两个调用时,spock 模拟返回了正确的值,但是当我在“然后:”部分。 这是模拟:
mockDao.readCounter(_, _, _, _, _) >> dbValue
这里是失败的“then:”部分:
1 * mockDao.readCounter(_, _, _, _, _)
// updateCounters is called with: sum = dbValue + value
1 * mockDao.updateCounter(namespace, date, key, min, shardID, dbValue + value)
在这种情况下,不返回“dbValue”,而是返回“0”。但是,如果我注释掉这两个检查中的任何一个,它就会通过。因此,以下两种情况通过:
//1 * mockDao.readCounter(_, _, _, _, _)
// updateCounters is called with: sum = dbValue + value
1 * mockDao.updateCounter(namespace, date, key, min, shardID, dbValue + value)
OR
1 * mockDao.readCounter(_, _, _, _, _)
// updateCounters is called with: sum = dbValue + value
//1 * mockDao.updateCounter(namespace, date, key, min, shardID, dbValue + value)
这里是 spock 的 gradle 部分:
// spock
testCompile "org.codehaus.groovy:groovy:2.4.7"
compile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.4'
// !!! To get none-interface base mocking to work with Spock
compile group: 'cglib', name: 'cglib-nodep', version: '3.2.4'
【问题讨论】:
标签: unit-testing groovy mocking spock