2
私は漸進的に(Meckを使用して)擬似を設定できるようにしたいので、さまざまな呼び出しの期待が異なるテスト設定機能で設定されています。私はmerge_expects
がそのトリックをするかもしれないと思った。しかし、私は、予期しない結果を見ています:Meckを使って漸進的にモックを設定するにはどうしたらいいですか?
default__second_expect_overwrites_first_expect_test() ->
meck:unload(),
meck:new(womble, [non_strict]),
meck:expect(womble, sleep, fun(8) -> ok end),
meck:expect(womble, sleep, fun(24) -> comatose end),
?assertEqual(comatose, womble:sleep(24)),
?assertError(function_clause, womble:sleep(8)).
merge_expects__second_expect_has_no_effect_test() ->
meck:unload(),
meck:new(womble, [non_strict, merge_expects]),
meck:expect(womble, sleep, fun(8) -> ok end),
meck:expect(womble, sleep, fun(24) -> comatose end),
?assertError(function_clause, womble:sleep(24)),
?assertEqual(ok, womble:sleep(8)).
私は次の回避策を使用することができることを知っているが、それは私のテストをuglifyます:
workaround_test() ->
meck:unload(),
meck:new(womble, [non_strict]),
meck:expect(womble, sleep, [{[8], ok}, {[24], comatose}]),
?assertEqual(comatose, womble:sleep(24)),
?assertEqual(ok, womble:sleep(8)).
Adamに感謝します。私が 'expect/3'を使いたい場所を知っている唯一の場所は、' meck:expect(m2、mult42、fun(X) - > X * 42 end) 'のようなモックを設定することです。 – MrBlueSky
関数節はガードを持つことができるため、扱いにくいです。これはMeckでは現在実装されていません。 –