2014-01-06 57 views
4

我使用ExUnit来测试我的Elixir应用程序,这是一款纸牌游戏。Elixir测试 - ExUnit - 重复数据实例

我发现,在我写的每一个测试中,我开始创建一副新的纸牌。

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

回答

9

您可以使用def setupmeta刚刚这一点。

例子:

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 

Here's一些更多的信息

+1

它看起来像它可以作为你的建议,但它不值得它最终对我来说是因为它可能比我的小需求开始更多的打字和重复。但是,嘿,我现在已经在工具包中使用了,当我真的需要它时。谢谢! – AugieDB

+0

您发布的链接已损坏。 – nietaki

+0

@nietaki您认为以下哪些链接是可取的: http://elixir-lang.org/docs/stable/ex_unit/ExUnit.Callbacks.html#summary or http://elixir-lang.org/工具入门/ MIX-OTP /文档,测试和-with.html –

1

,可以根据您的需要工作的另一种选择:

defmodule DeckTest do 
    use ExUnit.Case 

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

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