使用meck(Erlang)时导致“未模拟”错误的原因是什么?

时间:2014-01-27 23:40:02

标签: erlang meck

我是一个meck(和Erlang)的新手,我和梅克有点挣扎。我收到以下错误:

=ERROR REPORT==== 27-Jan-2014::16:20:05 ===
Error in process <0.1825.0> with exit value: {{not_mocked,substatsDb},    
[{meck_proc,gen_server,3,[{file,"src/meck_proc.erl"},{line,443}]},{meck_code_gen,exec,4, 
[{file,"src/meck_code_gen.erl"},{line,147}]},{substats,loop,1, 
[{file,"/Users/uyounri/gitsandbox/subpub/src/su... 

在测试开始时,我声明要模拟的模块:

meck:new(substats)

在测试的最后,我做的最后一件事是卸载被模拟的模块:

meck:unload(substats)

在产生上述错误时,模拟似乎按预期工作,直到测试结束。

谢谢, 富

修改 添加2?debugFmt()行似乎解决了问题;至少我不再得到错误。这是修改后的完整功能:

stop(_) ->
meck:expect(substatsDb, stop, 1, fun(dbconn) -> ok end),
substats:stop(),
%% Note: this and the next ?debugFmt() calls prevent a meck
%% exit error.  They both have to be present to prevent the error
?debugFmt("stop:~n", []),
meck:unload(substatsDb),
?debugFmt("stop: exit~n", []).

1 个答案:

答案 0 :(得分:1)

您是否尝试在模拟模块时添加 passthrough 选项?

meck:new(substatsDb, [passthrough])

另外,你在meck中使用模块“substatsDb”:期待调用,但是做meck:new for other module(substats),你应该为相同的模块做些事情(新的,期望的和卸载的)

希望它有所帮助!