Nice and elegant idea, but it is not solution for running non mocked and mocked code. When you run some code calling normal banana:eat, you can't run in same time process with mocked  version because  error_handler will not be raced. So for carefully wrote test it can be enough, but very fragile. You must disallow loading normal banana module by using embedded version of global error_handler.<br>
<br><div class="gmail_quote">On Sat, Jun 7, 2008 at 6:57 PM, Christian S <<a href="mailto:chsu79@gmail.com">chsu79@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">> True. And something I would like even better is if I could generate<br>
> that module in a few lines close to the eunit test function. (Cant be<br>
> impossible to create a module directly from a list of atoms and funs.<br>
> Doesnt need to be fast.)<br>
><br>
> A downside is that the module namespace is node-wide, so you cant<br>
> safely run your tests in parallell on the same node. This is a reason<br>
> I consider this to be a very dirty way to slip in the mock.<br>
<br>
</div>To follow up on myself. I hacked up something that almost fulfills my wishes:<br>
<br>
You load this module that follows the inteface of an error_handler:<br>
<br>
-module(mock).<br>
<br>
-compile(export_all).<br>
<br>
undefined_function(Mod, F, Args) -><br>
    case get(Mod) of<br>
        undefined -><br>
            exit({undefined, Mod, F, Args});<br>
        MockDict -><br>
            Fun = dict:fetch(F, MockDict),<br>
            apply(Fun, Args)<br>
    end.<br>
<br>
undefined_lambda(_Mod, _Fun, _Args) -><br>
    exit(undef).<br>
<br>
<br>
Second, I put this in my process to install the above error_handler<br>
for this process:<br>
<br>
init() -><br>
    Mock = dict:from_list([{eat, fun() -> yum end}]),<br>
    put(banana, Mock),<br>
    process_flag(error_handler, mock),<br>
    loop().<br>
<br>
<br>
Whenever this process calls banana:eat(), it will get the atom 'yum'<br>
back.  Completly process local.<br>
<br>
<br>
<br>
YES! It is dirty!  The prettiest flowers grow in manure!<br>
<br>
<br>
PS.<br>
<a href="http://paste.lisp.org/display/61885" target="_blank">http://paste.lisp.org/display/61885</a> has more of the code and<br>
experiment, at least until it goes away in a couple of hours.<br>
<div><div></div><div class="Wj3C7c">_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil