1

我正在尝试调用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),

如何使用不同的参数值集找出相同的功能?

4

1 回答 1

2

第二个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),
于 2018-06-28T15:54:47.507 回答