Оказывается, defimpl
определяет модуль за кулисами.Это можно найти с помощью функции impl_for
протокола:
iex(1)> Size.impl_for(%Foo{})
Size.Foo
Таким образом, мы можем проконтролировать этот модуль следующим образом:
defmodule FooTest do
use ExUnit.Case
doctest Foo
doctest Size.Foo
end
Обратите внимание, что если оба Size
и Foo
находятся в одном модуле (скажем, MyModule
), имя модуля должно быть указано дважды:
defmodule FooTest do
use ExUnit.Case
doctest MyModule.Foo
doctest MyModule.Size.MyModule.Foo
end