En tant que nouveau venu à meck, j'ai mis en place un test qui montre les différentes fonctionnalités. Cependant, je ne comprends pas pourquoi un développeur pourrait appeler meck: validate. Voici mon exemple:Quel est le but de meck: valider?
-module(meck_demo).
-include_lib("eunit/include/eunit.hrl").
validate_is_of_limited_use_test_() ->
{ foreach, fun setup_mock/0, fun cleanup_mock/1,
[fun validate_does_not_fail_if_a_function_is_not_called/0,
fun validate_does_not_fail_if_a_function_is_called_with_wrong_arity/0,
fun validate_does_not_fail_if_an_undefined_function_is_called/0,
fun validate_does_fail_if_a_function_was_called_with_wrong_argument_types/0,
fun validate_does_fail_if_expectation_throws_an_unexpected_exception/0 ]}.
validate_does_not_fail_if_a_function_is_not_called() ->
meck:expect(womble, name, fun() -> "Wellington" end),
?assert(meck:validate(womble)).
validate_does_not_fail_if_a_function_is_called_with_wrong_arity() ->
meck:expect(womble, name, fun() -> "Madame Cholet" end),
?assertError(undef, womble:name(unexpected_arg)),
?assert(meck:validate(womble)).
validate_does_not_fail_if_an_undefined_function_is_called() ->
?assertError(undef, womble:fly()),
?assert(meck:validate(womble)).
validate_does_fail_if_a_function_was_called_with_wrong_argument_types() ->
meck:expect(womble, jump, fun(Height) when Height < 1 ->
ok
end),
?assertError(function_clause, womble:jump(999)),
?assertNot(meck:validate(womble)).
validate_does_fail_if_expectation_throws_an_unexpected_exception() ->
meck:expect(womble, jump, fun(Height) -> 42 = Height end),
?assertError({badmatch, 999}, womble:jump(999)),
?assertNot(meck:validate(womble)).
setup_mock() ->
meck:new(womble, [non_strict]).
cleanup_mock(_SetupResult) ->
meck:unload(womble).
Qu'est-ce qui me manque?
- Mise à jour pour tenir compte des cas qu'Adam explique peut être pris
Merci Adam - c'est très utile. L'explication que vous avez donnée quant à la raison pour laquelle Meck ne peut pas détecter certains abus est logique. J'ai mis à jour ma question pour refléter les exemples que vous avez fournis. Dans les cas où validate * does * échoue, le test démontre également l'échec de toute façon (assertError). Donc, je ne comprends toujours pas pourquoi un codeur appelle réellement valider. – MrBlueSky
Je suis d'accord que son utilisation est limitée. Un cas d'utilisation serait que votre code testé ne tombe pas en panne, mais attrape en interne trop d'exceptions. Dans ce cas, si votre maquette n'est pas appelée correctement, vous pouvez utiliser Meck pour savoir si votre code devrait avoir planté ou non. –