1

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

例子:

-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.

我想为了测试目的模拟这个函数,而不是乘以它添加它们的数字。

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

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

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

4

1 回答 1

2

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

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

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).
于 2017-02-10T16:13:56.240 回答