4

ruby/rspec を使用すると、メソッドに対して行われたさまざまな呼び出しに対してさまざまな戻り値を受け取るために、次のようなことができることを知っています。

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

次のように、meck stub を 1 つの戻り値を持つメソッドにすることしかできませんでした。

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

ok最初の呼び出しと2 番目の呼び出しで返す方法はありok2ますか?

4

2 に答える 2

7

これを行うために、Meck には使用できる 2 つのショートカットがあります。

  • 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
    
于 2015-07-18T13:07:57.757 に答える
5

これは、expectaction 関数が最初に呼び出されたときに再定義することで実行できます。

meck:expect(module,
            some_method, 
            fun() ->
                     %% Redefine the expect fun for next invocation
                     meck:expect(module,
                                 some_method,
                                 fun() ->
                                          ok2 
                                 end),
                     ok
            end).
于 2015-07-17T21:14:08.823 に答える