首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >梅克能嘲笑艾朗:出口吗?

梅克能嘲笑艾朗:出口吗?
EN

Stack Overflow用户
提问于 2015-10-22 22:43:48
回答 2查看 387关注 0票数 2

我想把这个放在主管模块里:

代码语言:javascript
复制
stop() ->
  exit(whereis(mousetrap_sup), kill).

因此,天真的测试可能会做到这一点:

代码语言:javascript
复制
stop_invokes_exit_test() ->
  meck:new(erlang, [unstick, passthrough]),
  meck:expect(erlang, whereis, 1, a_pid),
  meck:expect(erlang, exit, 2, true),
  mousetrap_sup:stop(),
  ?assert(meck:called(erlang, exit, [a_pid, kill])).

毫不奇怪,它挂着。

我可以看到哪里可能不可能使用测试来执行这段代码,但是有什么方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-23 09:48:21

您可以使用该名称生成一个进程,并检查退出原因:

代码语言:javascript
复制
{Pid, Ref} = spawn_monitor(timer, sleep, [infinity]),
register(my_sup, Pid),
mousetrap_sup:stop(),
receive
    {'DOWN', Ref, process, Pid, Reason} ->
        ?assertEqual(killed, Reason)
after 1000 ->
    error(not_killed)
end.
票数 4
EN

Stack Overflow用户

发布于 2015-10-23 00:12:11

从meck文档

Meck将在模拟某些模块时遇到困难,因为Meck通过重新编译和重新加载模块来工作。因为Erlang有一个平面的模块命名空间,所以必须在Erlang中全局地替换一个模块。这意味着某些模块不能被模拟。下面是一个并非详尽无遗的模块列表,这些模块可以是有问题的模拟,也可以是根本不可能的:

  • 二郎
  • 操作系统
  • 加密
  • 编译
  • 全局

所以不,你不能嘲笑退出。但是,您可以将退出调用包装在另一个函数中,并检查该函数。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33291990

复制
相关文章

相似问题

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