我想模拟一个多次调用的对象方法,每次结果都必须不同。
这是我要做的事情:
fooMock.demand.someMethod(3..3) { ->
//call1
if (**some condition**)
return 1
//call2
if (**some condition**)
return 2
//call3
if (**some condition**)
return 3
}
那么,有没有办法知道当前的电话号码是多少?或者你提供更好的东西?
有可能在Grails 2.3-M2(http://jira.grails.org/browse/GRAILS-4611)中这样做,但在那之前,有人有解决方法吗?
答案 0 :(得分:3)
您可以在测试中创建一个属性来控制:
class MyTest {
int someMethodCount
@Before
void setup() {
fooMock.demand.someMethod(3..3) { ->
someMethodCount++
...
}
}
}
答案 1 :(得分:0)
如果您不关心严格模拟并且只是单元测试someMethod
那么您可以使用使用地图的原始方法:
void testSomething() {
def mockUtil = ["someMethod" : {param->
//I have used param only to handle conditional logics
//param can be optional
if(param == 1)return "John"
if(param == 2)return "Nancy"
if(param == 3)return "Mark"
}]
assert mockUtil.someMethod(1) == "John"
assert mockUtil.someMethod(2) == "Nancy"
assert mockUtil.someMethod(3) == "Mark"
}