使用meck使用相同的参数对同一个方法进行多次调用

时间:2015-07-17 16:29:13

标签: erlang eunit meck

我知道使用ruby / rspec,您可以执行以下操作,以便为对该方法进行的不同调用接收不同的返回值:

allow(double).to receive(:msg).and_return(value1, value2, value3)

我只能使用一个返回值来制作一个方法,如下所示:

meck:expect(module, some_method, fun() -> ok end)

有没有办法让它在第一次通话时返回ok,然后在第二次通话时返回ok2

2 个答案:

答案 0 :(得分:5)

您可以通过在第一次调用期望函数时重新定义期望函数来实现此目的:

meck:expect(module,
            some_method, 
            fun() ->
                     %% Redefine the expect fun for next invocation
                     meck:expect(module,
                                 some_method,
                                 fun() ->
                                          ok2 
                                 end),
                     ok
            end).

答案 1 :(得分:5)

为此,您可以使用Meck中的两个快捷方式:

  • meck:sequence/4此函数返回序列中的每个元素,直到最后一个元素。然后,无限期地返回最后一个元素。

    6> meck:sequence(module, some_method, 0, [ok, ok2]).
    ok
    7> module:some_method().
    ok
    8> module:some_method().
    ok2
    9> module:some_method().
    ok2
    
  • meck:loop/4此函数返回循环中的每个元素。当返回最后一个元素时,它将以第一个元素重新开始。

    10> meck:loop(module, some_method, 0, [ok, ok2]).
    ok
    11> module:some_method().
    ok
    12> module:some_method().
    ok2
    13> module:some_method().
    ok