Grails多次模拟相同的方法,但结果不同

Grails多次模拟相同的方法,但结果不同,grails,mocking,grails-2.2,Grails,Mocking,Grails 2.2,我想模拟一个被多次调用的对象方法,每次调用的结果都必须不同 下面是我想做的: fooMock.demand.someMethod(3..3) { -> //call1 if (**some condition**) return 1 //call2 if (**some condition**) return 2 //call3 if (**some condition**) return

我想模拟一个被多次调用的对象方法,每次调用的结果都必须不同

下面是我想做的:

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()中可以这样做,但在此之前,有人有解决办法吗?

您可以在测试中创建一个属性来控制:

class MyTest {
  int someMethodCount

  @Before
  void setup() {
    fooMock.demand.someMethod(3..3) { ->
      someMethodCount++
      ...
    }
  }

}

如果您不关心严格的模拟,只进行单元测试
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"
}

我想知道为什么我们会在同一时间看同一个问题,而且在我漫长的周末,阵亡将士纪念日…:)。顺便说一句,你的方法是一个很好的方式,以防严格的嘲弄。酷!我很高兴这对你有帮助。@dmahapatro这是一个快速浏览,所以在午餐时间(在巴西):-)mockUtil定义在哪里?在上面的代码中,您似乎没有显示mockUtil的定义位置,您只是在设置它。我的错。我只是想展示一下嘲弄是多么的松散。查看我的更新。尽管测试用例是哑的,但其思想是使用一个带有字符串键(匹配方法名)和闭包作为值的映射。感谢您在一年多之后指出这一点。:)@CPU100