2014-01-06 2 views
4

Я использую ExUnit для тестирования моего приложения Elixir, которое представляет собой карточную игру.Elixir testing - 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 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 

Here's еще информация

+1

Похоже, он работает, как вы предлагаете, но это не стоит это, в конце концов, для меня, потому что это, возможно, еще больше набирает и повторяет, чем это начиналось с моих маленьких потребностей. Но, эй, у меня есть это в наборе инструментов сейчас, когда мне это действительно нужно. Благодаря! – AugieDB

+0

Ссылка, которую вы опубликовали, сломана. – nietaki

+0

@nietaki Какой из следующих ссылок вы считаете предпочтительным: http://elixir-lang.org/docs/stable/ex_unit/ExUnit.Callbacks.html#summary или http://elixir-lang.org/ получение стартером/микс-OTP/Docs-тесты-и-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 
Смежные вопросы