【问题标题】:How do I write an Elixir doctest to verify an empty MapSet如何编写 Elixir doctest 来验证空 MapSet
【发布时间】:2019-04-17 10:24:20
【问题描述】:

刚刚了解 Elixir 中的 doctest,我正在尝试编写 Elixir doctest 来验证一个结构是否包含两个空 MapSet。

defstruct [:coordinates, :hit_coordinates]

@doc """
  Creates a new Island structure

  ## Examples

    iex> IslandsEngine.Island.new()
    %IslandsEngine.Island { coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]> }

"""
def new(), do:
  %Island{ coordinates: MapSet.new(), hit_coordinates: MapSet.new() }

当我使用 mix test 运行它时,我收到以下错误:

Compiling 1 file (.ex)

  1) doctest IslandsEngine.Island.new/0 (1) (IslandsEngine.IslandTest)
     test/islands_engine/island_test.exs:3
     Doctest did not compile, got: (TokenMissingError) lib/islands_engine/island.ex:19: missing terminator: } (for "{" starting at line 19)
     code: %IslandsEngine.Island { coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]> }
     stacktrace:
       lib/islands_engine/island.ex:19: IslandsEngine.Island (module)

.......

Finished in 0.1 seconds
6 doctests, 2 tests, 1 failure

但在 IEx 会话中一切正常:

iex> IslandsEngine.Island.new()
%IslandsEngine.Island{coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]>}
iex>

感谢您的帮助!

【问题讨论】:

    标签: elixir doctest ex-unit


    【解决方案1】:

    您需要有代码来构建有效答案,而不是 doctest 中的文本表示。所以而不是:

    %IslandsEngine.Island{coordinates: #MapSet<[]>, hit_coordinates: #MapSet<[]>}
    

    做:

    %IslandsEngine.Island{coordinates: %MapSet{}, hit_coordinates: %MapSet{}}
    

    我猜在这种情况下,该示例作为测试的价值不大,因为它只是复制了代码,但作为文档可能仍然有效。

    【讨论】:

    • 感谢 Pawel,您的解释是有道理的,是的,对于文档示例和简单的回归测试来说,它确实更多。
    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2021-08-24
    • 1970-01-01
    相关资源
    最近更新 更多