defmodule MyStack.Test do require MyStack use ExUnit.Case, async: true defmodule MySupervisor do use Supervisor def start_link do Supervisor.start_link(__MODULE__, :ok) end def init(:ok) do children = [ %{id: 1, start: {MyStack, :start_link, [[name: :my_server]]}}, %{id: 2, start: {MyStack, :start_link, [[name: :my_server2]]}} ] Supervisor.init(children, strategy: :one_for_one) end end setup do {:ok, supervisor: MySupervisor.start_link()} end test "server starts with an empty client list", %{supervisor: supervisor} do send(:my_server, {:push, 2}) assert GenServer.call(:my_server, :pop) == 2 send(:my_server, {:push, 1}) send(:my_server, {:push, 4}) send(:my_server2, {:push, 3}) send(:my_server2, {:push, 8}) assert GenServer.call(:my_server2, :pop) == 8 assert GenServer.call(:my_server, :pop) == 4 assert GenServer.call(:my_server2, :pop) == 3 assert GenServer.call(:my_server, :pop) == 1 end end