Как мне сопоставить одну и ту же функцию с несколькими наборами значений параметров?

Я пытаюсь ответить на звонок application:get_env, но я тестирую функцию, которая вызывает ее с двумя разными наборами аргументов.

Я устанавливаю два отдельных meck:expect вызова, как это, но когда функция, которую я тестирую, пытается вызвать application:get_env(my_app, my_param_one), она терпит неудачу и выдает error:function_clause с undefined.

meck:expect(application, get_env, fun(my_app, my_param_one) -> {ok, "my_value_one"} end),
meck:expect(application, get_env, fun(my_app, my_param_two) -> {ok, "my_value_two"} end),

Как я могу использовать одну и ту же функцию с разными наборами значений параметров?


person Grant Winney    schedule 28.06.2018    source источник


Ответы (1)


Второй meck перезаписывает первый.

Каждый раз, когда вы определяете функцию в Erlang путем сопоставления с образцом для разных наборов значений, вы разделяете каждый набор образцов точкой с запятой, например:

-module(sample).

-export([create_greeting/2]).

create_greeting("Grant", _Greeting) -> io:format("Good day sir!");
create_greeting(Name, Greeting) -> io:format("~s, ~s!", [Greeting, Name]).

Точно так же, когда вы настраиваете свои операторы meck, определите функцию один раз, но разделите каждый набор шаблонов / аргументов точкой с запятой, например:

meck:expect(application, get_env, fun(my_app, my_param_one) -> {ok, "my_value_one"};
                                     (my_app, my_param_two) -> {ok, "my_value_two"}
                                  end),
person Grant Winney    schedule 28.06.2018