首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Meck逐步建立一个模拟?

如何使用Meck逐步建立一个模拟?
EN

Stack Overflow用户
提问于 2017-08-08 13:09:10
回答 1查看 218关注 0票数 2

我希望能够逐步设置一个模拟(使用Meck),以便在不同的测试设置函数中设置对不同调用的期望。我想merge_expects也许能做到这一点。但我看到了意想不到的结果:

代码语言:javascript
复制
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)).

我知道我可以使用以下解决方法,但它会使我的测试变得丑陋:

代码语言:javascript
复制
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)).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 13:34:01

这似乎是一个与使用funs作为期望值规范有关的"bug“(我认为它从一开始就没有得到支持,但在任何情况下都没有得到明确的文档说明)。作为解决办法,您可以使用expect/4

代码语言:javascript
复制
1> meck:new(womble, [non_strict, no_link, merge_expects]).
ok
2> meck:expect(womble, sleep, [24], comatose).
ok
3> womble:sleep(8).
** exception error: no function clause matching womble:sleep(8)
4> womble:sleep(24).
comatose
5> meck:expect(womble, sleep, [8], ok).
ok
6> womble:sleep(8).
ok
7> womble:sleep(24).
comatose
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45569258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档