【问题标题】:Using meck to make multiple calls to the same method with the same arguments使用 meck 对具有相同参数的相同方法进行多次调用
【发布时间】:2015-10-07 10:50:14
【问题描述】:

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

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

我只能让 meck 存根成为一个具有一个返回值的方法,如下所示:

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

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

【问题讨论】:

    标签: erlang eunit meck


    【解决方案1】:

    为此,您可以使用 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
      

    【讨论】:

    • 不错!我完全错过了这些功能。这应该是公认的答案。
    【解决方案2】:

    您可以通过在第一次调用时重新定义 expectaction 函数来做到这一点:

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

    【讨论】:

    • 乌龟一路向下!
    猜你喜欢
    • 2011-12-26
    • 2016-06-16
    • 2012-01-17
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多