Elixir测试 - ExUnit - 重复数据实例

4
我正在使用ExUnit来测试我的Elixir应用程序,这是一个纸牌游戏。
我发现每次编写测试时,都需要创建一副全新的纸牌。
test "Do This Crazy Thing do
  deck = Deck.create()
  [...]
end

test "Do This Other Crazy Unrelated Thing" do
  deck = Deck.create()
   [...]
end

有没有一种方法可以将这个因素分解出来,以便在每个测试用例之前只需创建一个新的牌组?我知道有类似于 setup do [...] end 的东西,但我不认为那对我是解决方案。
我需要另一个测试框架吗?我需要以某种我还没有想到的方式使用 setup 吗?
-Augie
2个回答

9
你可以使用def setup并将meta用于此目的。

例如:

defmodule DeckTest do
  use ExUnit.Case

  setup do
    {:ok, cards: [:ace, :king, :queen] }
  end

  test "the truth", meta do
    assert meta[:cards] == [:ace, :king, :queen]
  end
end

这里有更多相关的信息


1
看起来它按照你的建议运作,但对于我的小需求来说,最终它并不值得,因为可能比开始时还要更多的打字和重复。但是,嘿,现在我有了这个工具箱,以备将来真正需要时使用。谢谢! - AugieDB
您发布的链接已经失效。 - nietaki
@nietaki,你认为以下哪个链接更好:http://elixir-lang.org/docs/stable/ex_unit/ExUnit.Callbacks.html#summary 还是 http://elixir-lang.org/getting-started/mix-otp/docs-tests-and-with.html - Ryan Cromwell

1

根据您的需求,另一个可能适用的选项:

defmodule DeckTest do
  use ExUnit.Case

  defp cards, do: [:ace, :king, :queen]

  test "the truth" do
    assert cards == [:ace, :king, :queen]
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接