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

时间:2013-05-25 10:58:29

标签: 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 3
}

那么,有没有办法知道当前的电话号码是多少?或者你提供更好的东西?

有可能在Grails 2.3-M2(http://jira.grails.org/browse/GRAILS-4611)中这样做,但在那之前,有人有解决方法吗?

2 个答案:

答案 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"
}