如何进行meck:期待具有多个arities的函数

时间:2017-02-10 14:56:45

标签: function mocking erlang meck

我在一个模块中有一个函数,它具有多个函数子句,用于相同的函数名但不同的函数arities。

示例:

-module(module_name).

-export([func/1, func/2, func/3]).

func(N) ->
    N.

func(N, K) -> 
    N * K.

func(N, K, M) ->
    N * K * M.

我想模拟这个函数用于测试目的,以便不是将它们相乘而是将它们相加。

我知道如何只为一个arity模拟一个函数:

1> meck:expect(module_name, func, fun(N, K, M) -> N + K + M end).

但我怎么能为多个arities嘲笑它呢?

1 个答案:

答案 0 :(得分:2)

在Erlang中,具有相同名称和不同arities的函数不被视为具有相同功能的子句,而是完全不同的函数。名称func/1func/2func/3暗示了这一点。

Meck以同样的方式工作,将三个函数视为不同的函数,它们之间没有任何关系。 meck:expect通过检查传递给它的fun来确定要模拟的函数的arity,所以你可以像这样模拟三个不同的函数:

meck:expect(module_name, func, fun(N) -> N end).
meck:expect(module_name, func, fun(N, K) -> N + K end).
meck:expect(module_name, func, fun(N, K, M) -> N + K + M end).