2017-02-10 1 views
1

J'ai une fonction dans un module qui a plusieurs clauses de fonction pour le même nom de fonction mais différentes fonctions.Comment mecker: attendre une fonction avec plusieurs arités

Exemple:

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

Je voudrais railler cette fonction à des fins de test de sorte qu'au lieu de multiplier les chiffres, il les ajoute.

Je sais comment se moquer une fonction que pour une arité:

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

Mais comment puis-je moquer de plusieurs arités?

Répondre

2

Dans Erlang, les fonctions ayant le même nom et différentes arités ne sont pas considérées comme des clauses de la même fonction, mais comme des fonctions complètement différentes. Les noms func/1, func/2 et func/3 allusion à cela. Meck fonctionne de la même manière, en traitant les trois fonctions comme des fonctions différentes sans aucune relation entre elles. meck:expect détermine l'arité de la fonction à moqué en inspectant le fun vous passez à elle, vous pouvez donc vous moquer des trois fonctions différentes comme ceci:

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