使用 meck 多次调用具有相同参数的相同方法
Using meck to make multiple calls to the same method with the same arguments
我知道使用 ruby/rspec,您可以执行类似以下操作,以便为对方法的不同调用接收不同的 return 值:
allow(double).to receive(:msg).and_return(value1, value2, value3)
我只能用一个 return 值使 meck 存根成为一种方法,如下所示:
meck:expect(module, some_method, fun() -> ok end)
有没有办法让第一次调用 return ok
,然后第二次调用 ok2
?
您可以通过在第一次调用时重新定义 expectaction 函数来做到这一点:
meck:expect(module,
some_method,
fun() ->
%% Redefine the expect fun for next invocation
meck:expect(module,
some_method,
fun() ->
ok2
end),
ok
end).
为此,您可以使用 Meck 中的两个快捷方式:
meck:sequence/4
这个函数returns一个序列中的每个元素,直到最后一个元素。然后,无限返回最后一个元素。
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
这个函数 returns 每个元素都在一个循环中。当返回最后一个元素时,它从第一个元素开始。
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
我知道使用 ruby/rspec,您可以执行类似以下操作,以便为对方法的不同调用接收不同的 return 值:
allow(double).to receive(:msg).and_return(value1, value2, value3)
我只能用一个 return 值使 meck 存根成为一种方法,如下所示:
meck:expect(module, some_method, fun() -> ok end)
有没有办法让第一次调用 return ok
,然后第二次调用 ok2
?
您可以通过在第一次调用时重新定义 expectaction 函数来做到这一点:
meck:expect(module,
some_method,
fun() ->
%% Redefine the expect fun for next invocation
meck:expect(module,
some_method,
fun() ->
ok2
end),
ok
end).
为此,您可以使用 Meck 中的两个快捷方式:
meck:sequence/4
这个函数returns一个序列中的每个元素,直到最后一个元素。然后,无限返回最后一个元素。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
这个函数 returns 每个元素都在一个循环中。当返回最后一个元素时,它从第一个元素开始。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