Erlang 与foreach一起使用meck的正确方法
我正在使用meck测试我的gen_服务器Erlang 与foreach一起使用meck的正确方法,erlang,eunit,meck,Erlang,Eunit,Meck,我正在使用meck测试我的gen_服务器mymodule。特别是,我按照提供的说明使用meck模拟httpc 以下是我从测试中提取的一些代码: do_some_tests_() -> {foreach, fun start/0, fun stop/1, [fun do_some_stuff/1, fun do_some_other_stuff/1 ]}. start() -> {ok, _} = mymodule:start_link(),
mymodule
。特别是,我按照提供的说明使用meck模拟httpc
以下是我从测试中提取的一些代码:
do_some_tests_() ->
{foreach,
fun start/0,
fun stop/1,
[fun do_some_stuff/1,
fun do_some_other_stuff/1
]}.
start() ->
{ok, _} = mymodule:start_link(),
meck:new(httpc),
_Pid = self().
stop(_) ->
meck:unload(httpc),
mymodule:stop().
do_some_stuff(Pid) ->
%% here i use meck
meck:expect(httpc, request,
fun(post, {_URL, _Header, ContentType, Body}, [], []) ->
Reply = "Data to send back"
Pid ! {ok, {{"", 200, ""}, [], Reply}}
end),
%% here i do the post request
mymodule:myfunction(Body),
receive
Any ->
[
?_assertMatch({ok, {{_, 200, _}, [], _}}, Any),
?_assert(meck:validate(httpc))
]
end.
通过这段代码,我能够运行测试,但仍有两件事我无法理解:
1) 在结果中,我得到如下结果:
mymodule_test:43: do_some_stuff...ok
mymodule_test:43: do_some_stuff...ok
mymodule_test:53: do_some_other_stuff...ok
mymodule_test:53: do_some_other_stuff...ok
是否可能每次测试只获得一行而不是两行
2) 如何为每个测试添加口语描述 函数
do_some_stuff(Pid)
生成两个测试,因此检查和显示这两个测试都很正常
但是,您可以为每个生成器和测试添加名称/说明:
do_some_tests_() ->
{foreach,
fun start/0,
fun stop/1,
[{"Doing some stuff" , fun do_some_stuff/1},
{"Doing some other stuff" , fun do_some_other_stuff/1}
]}.
do_some_stuff(Pid) ->
%% [code]
[
{"Check 200" , ?_assertMatch({ok, {{_, 200, _}, [], _}}, Any)},
{"Check httpc" , ?_assert(meck:validate(httpc))}
]
end.
这将显示以下内容:
module 'MyModule'
Doing Some Stuff
module:57: do_some_stuff (Check 200)...ok
module:58: do_some_stuff (Check httpc)...ok
用尤尼特的话来说,它们被称为“标题””:
标题
任何测试或测试集T都可以通过包装标题进行注释
在对{Title,T}中,其中Title是字符串。为方便起见,任何
通常使用元组表示的测试可以简单地给出一个
标题字符串作为第一个元素,即写入{“标题”,…}
而不是像{“thetitle”{…}那样添加额外的元组包装器
函数
do\u some\u stuff(Pid)
生成两个测试,因此检查和显示这两个测试都很正常
但是,您可以为每个生成器和测试添加名称/说明:
do_some_tests_() ->
{foreach,
fun start/0,
fun stop/1,
[{"Doing some stuff" , fun do_some_stuff/1},
{"Doing some other stuff" , fun do_some_other_stuff/1}
]}.
do_some_stuff(Pid) ->
%% [code]
[
{"Check 200" , ?_assertMatch({ok, {{_, 200, _}, [], _}}, Any)},
{"Check httpc" , ?_assert(meck:validate(httpc))}
]
end.
这将显示以下内容:
module 'MyModule'
Doing Some Stuff
module:57: do_some_stuff (Check 200)...ok
module:58: do_some_stuff (Check httpc)...ok
用尤尼特的话来说,它们被称为“标题””:
标题
任何测试或测试集T都可以通过包装标题进行注释
在对{Title,T}中,其中Title是字符串。为方便起见,任何
通常使用元组表示的测试可以简单地给出一个
标题字符串作为第一个元素,即写入{“标题”,…}
而不是像{“thetitle”{…}那样添加额外的元组包装器
你好。我可以得到单个描述(例如,勾选200),但如果我尝试输入主要描述(例如,做一些事情),我会得到:未定义***糟糕的测试描述符***你好。我可以得到单个描述(例如,检查200),但如果我试图把主要描述(例如,做一些事情),我得到:未定义***坏的测试描述符***