diff --git a/lib/mox.ex b/lib/mox.ex index 02a721d..64c85e9 100644 --- a/lib/mox.ex +++ b/lib/mox.ex @@ -707,6 +707,8 @@ defmodule Mox do end end + defp add_expectations!(_mock, []), do: :ok + defp add_expectations!(mock, key_expectation_list) do validate_mock!(mock) diff --git a/test/mox_test.exs b/test/mox_test.exs index 67006be..80c38b2 100644 --- a/test/mox_test.exs +++ b/test/mox_test.exs @@ -835,6 +835,18 @@ defmodule MoxTest do assert SciCalcMock.exponent(2, 10) == 1024 end) end + + test "does not crash verify when all callbacks are optional and skipped" do + defmodule AllOptionalImpl do + @behaviour AllOptionalCallbacks + def optional_fun, do: :ok + end + + in_all_modes(fn -> + stub_with(AllOptionalMock, AllOptionalImpl) + verify!() + end) + end end describe "allow/3" do diff --git a/test/support/behaviours.ex b/test/support/behaviours.ex index c847115..bca547e 100644 --- a/test/support/behaviours.ex +++ b/test/support/behaviours.ex @@ -8,3 +8,8 @@ defmodule ScientificCalculator do @callback sin(integer()) :: float() @optional_callbacks [sin: 1] end + +defmodule AllOptionalCallbacks do + @callback optional_fun() :: :ok + @optional_callbacks [optional_fun: 0] +end diff --git a/test/support/mocks.ex b/test/support/mocks.ex index 95a7bc8..d37fcf3 100644 --- a/test/support/mocks.ex +++ b/test/support/mocks.ex @@ -7,6 +7,11 @@ Mox.defmock(SciCalcMockWithoutOptional, skip_optional_callbacks: true ) +Mox.defmock(AllOptionalMock, + for: AllOptionalCallbacks, + skip_optional_callbacks: true +) + Mox.defmock(MyMockWithoutModuledoc, for: Calculator) Mox.defmock(MyMockWithFalseModuledoc, for: Calculator, moduledoc: false) Mox.defmock(MyMockWithStringModuledoc, for: Calculator, moduledoc: "hello world")