gen_server
mocking. This project is functioning but still young.
{ok, Mock} = gen_server_mock:new(),
gen_server_mock:expect_call(Mock, fun(one, _From, _State) -> ok end),
gen_server_mock:expect_call(Mock, fun(two, _From, State) -> {ok, State} end),
gen_server_mock:expect_call(Mock, fun(three, _From, State) -> {ok, good, State} end),
gen_server_mock:expect_call(Mock, fun({echo, Response}, _From, State) -> {ok, Response, State} end),
gen_server_mock:expect_cast(Mock, fun(fish, State) -> {ok, State} end),
gen_server_mock:expect_info(Mock, fun(cat, State) -> {ok, State} end),
ok = gen_server:call(Mock, one),
ok = gen_server:call(Mock, two),
good = gen_server:call(Mock, three),
tree = gen_server:call(Mock, {echo, tree}),
ok = gen_server:cast(Mock, fish),
Mock ! cat,
gen_server_mock:assert_expectations(Mock),
{ok}.
See test/src/eunit_gen_server_mock.erl
Currently three expectations are supported: expect_call
, expect_cast
, expect_info
.
The fun
argument takes the same arguments as the respective handle_
gen_server
call. However, unlike the handle_
calls, the response should be
one of ok
, {ok, NewState}
, {ok, Response, NewState}
. Anything else will
be considered a failure.
For example:
expect_call(Mock, fun(Request, From, State) -> ok end)
expect_cast(Mock, fun(Msg, State) -> {ok, State} end)
expect_info(Mock, fun(Info, State) -> {error, State} end)
(will raise an error, return{ok, State}
for success)
Alpha. API may change depending on feedback. Hosted on Github - patches readily accepted.
skelerl
, if you want to run tests- tested with eunit, should work with other libraries in theory
I suspect that one could write a more general process mocking library relatively easily.
- Initial blog post
- Work inspired by this post
- Github Repo (Patches readily accepted)
- Mocks Aren't Stubs
- Nate Murray <nmurray [AT] attinteractive.com> github