2013-08-10 2 views
0

Я использую meck для тестирования моего gen_server mymodule. В частности, я использую meck для издевательства httpc в соответствии с инструкциями here.Правильный способ использования meck with foreach

Вот код, я извлек из моего теста:

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) Как я могу добавить описание для каждого теста?

ответ

3

Функция 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 

В EUnit жаргоне, это знают, как " наименования ":

Названия

Любой тест или тестовый набор Т может быть аннотированный с названием, окружив его в паре {Title, Т}, где название является строкой. Для удобства любой тест , который обычно представляется с использованием кортежа, может быть просто задан в качестве первого элемента строки заголовка , т. Е. Записи {«The Title», ...} вместо добавления дополнительной кортежей кортежа, как в { «Название», {...}}.

http://www.erlang.org/doc/apps/eunit/chapter.html#id61107

+0

Здравствуйте. Я могу получить отдельные описания (например, Check 200), но если я попытаюсь поместить основное описание (например, Doing Some Stuff), я получаю: undefined *** плохой дескриптор теста *** – user601836

Смежные вопросы