如何编写Elixir doctest来验证空MapSet

问题描述 投票:1回答:1

刚学习Elixir中的doctests,我正在尝试编写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个回答
1
投票

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

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

做:

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

我想在这种情况下,该示例作为测试几乎没有价值,因为它只是复制代码,但它可能仍然有效作为文档。

© www.soinside.com 2019 - 2024. All rights reserved.