[erlang-questions] Unit Testing gen_server callbacks
Jan Vincent Liwanag
jvliwanag@REDACTED
Tue Aug 14 09:57:01 CEST 2012
Given the following code:
adder.erl:
start(B) -> gen_server:start(?MODULE, B, []).
add(Pid, N) -> gen_server:cast(Pid, {add, N}).
get_total(Pid, N) -> gen_server:call(Pid, get_total).
init(Total) -> {ok, Total}.
handle_call(get_total, _From, Total) -> {reply, Total, Total}.
handle_cast({add, N}, Total) -> {noreply, N+Total).
It would be better to have a test such that:
{ok, P} = adder:start(0),
adder:add(P, 5),
adder:add(P, 3),
adder:add(P, 2),
?assertEqual(10, adder:get_running_total()).
Rather than:
?assertEqual({noreply, 12}, handle_cast({add, 5}, 7)).
?assertEqual({reply, 100, 100}, handle_call(get_total, somepid, 100)).
For one thing, if I change the gen_server state from an int to a record and fix up the code - the first set of tests should still succeed while the second won't.
On Aug 14, 2012, at 2:41 PM, Daniel Eliasson wrote:
> It should be easy enough to unit test such things, just run a handle_call with the right arguments, and verify that the output and new state is correct?
>
> I don't think there's a need to actually start the gen_server itself and unit test the callbacks by going through gen_server:call, if that's what you mean. In what way do you find it to be fragile?
>
> Best,
> Daniel
>
> On 14 August 2012 03:48, Jan Vincent Liwanag <jvliwanag@REDACTED> wrote:
> Hi,
>
> What are your thoughts on unit testing gen_server (or other gen_*) callbacks (handle_call, etc) directly? Is this an ok practice? Or should unit tests test only the public api?
>
> On my end, I find testing gen_server callbacks to be rather fragile. Eager to hear out other thoughts.
>
> Thanks,
>
> Jan Vincent Liwanag
> jvliwanag@REDACTED
> +63 (999) 888-0247
>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
Jan Vincent Liwanag
jvliwanag@REDACTED
+63 (999) 888-0247
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120814/2229939a/attachment.htm>
More information about the erlang-questions
mailing list