defmodule GenReset do @moduledoc """ Documentation for GenServerReset. GenServerReset allows GenServers to be reset during testing. """ defmacro __using__(_args) do quote do def handle_info(:"$gen_reset", state) do case init(:erlang.get(:"$gen_reset_initial_args")) do {:ok, state} -> {:noreply, state} {:ok, state, continue} -> {:noreply, state, continue} end end def register_gen_reset(args) do GenReset.Tracker.add(self()) :erlang.put(:"$gen_reset_initial_args", args) end end end end defmodule Server do use GenServer use GenReset def init(args) do register_gen_reset(args) {:ok, args} end def handle_call(:state, _from, state), do: {:reply, state, state} def handle_cast({:set, value}, _state), do: {:noreply, value} end