[erlang-questions] Mocking in Erlang
Robert Virding
rvirding@REDACTED
Sat Jun 7 22:37:17 CEST 2008
Actually this is not really a dirty hack. The reason why you can define your
own error handler is to allow customising error handling in an application.
We provided all the tools necessary to give you a wide range of options when
shooting your own foot. :-) Seriously this was not the case, we wanted to
provide tools to build systems and not packaged solutions.
Robert
2008/6/7 Christian S <chsu79@REDACTED>:
> > True. And something I would like even better is if I could generate
> > that module in a few lines close to the eunit test function. (Cant be
> > impossible to create a module directly from a list of atoms and funs.
> > Doesnt need to be fast.)
> >
> > A downside is that the module namespace is node-wide, so you cant
> > safely run your tests in parallell on the same node. This is a reason
> > I consider this to be a very dirty way to slip in the mock.
>
> To follow up on myself. I hacked up something that almost fulfills my
> wishes:
>
> You load this module that follows the inteface of an error_handler:
>
> -module(mock).
>
> -compile(export_all).
>
> undefined_function(Mod, F, Args) ->
> case get(Mod) of
> undefined ->
> exit({undefined, Mod, F, Args});
> MockDict ->
> Fun = dict:fetch(F, MockDict),
> apply(Fun, Args)
> end.
>
> undefined_lambda(_Mod, _Fun, _Args) ->
> exit(undef).
>
>
> Second, I put this in my process to install the above error_handler
> for this process:
>
> init() ->
> Mock = dict:from_list([{eat, fun() -> yum end}]),
> put(banana, Mock),
> process_flag(error_handler, mock),
> loop().
>
>
> Whenever this process calls banana:eat(), it will get the atom 'yum'
> back. Completly process local.
>
>
>
> YES! It is dirty! The prettiest flowers grow in manure!
>
>
> PS.
> http://paste.lisp.org/display/61885 has more of the code and
> experiment, at least until it goes away in a couple of hours.
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20080607/296ca111/attachment.htm>
More information about the erlang-questions
mailing list