RSpec: СУХОЙ способ тестирования набора значений

У меня есть модель vote , в которой есть метод класса, называемый score . По сути, я создал математическое уравнение в электронной таблице и пытаюсь воспроизвести его в рубине. Однако моя первая попытка не сработала, поэтому мне действительно нужно начать добавлять еще тонну тестов.

То, как я » Я хочу провести тестирование, это взять стек входных и выходных значений из моей электронной таблицы и протестировать их каждое. В общем, тесты можно было бы составить следующим образом:

 inputs = [a,b,c] ... score.should == x
 inputs = [a,b,c,d] ... score.should == y
 inputs = [c,d] .... score.should == z

Однако самый короткий способ, который я нашел для записи этого в RSpec, - это дать пример для каждого случая, примерно так (упрощенный пример, но должен дать вам идея):

it "should have a score of X" do
  test_object = Votable.new(...)
  @user1.vote.create(:value=>##, :votable=>test_object)
  @user2.vote.create(:value=>##, :votable=>test_object)
  @user3.vote.create(:value=>##, :votable=>test_object)
  test_object.votes.score.should == X
end

Итак, вышеперечисленное работает, но для каждого примера требуется много текста, и, чтобы сгладить изгибы и обеспечить хорошее тестовое покрытие, я бы хотел запустить около 20 тестовых примеров.

Итак, серьезно, должен быть более простой способ настроить это один раз, а затем протестировать кучу возможных комбинаций ввода / вывода, верно? Может ли кто-нибудь предложить СУХОЙ способ выполнить такой тест в RSpec?

Спасибо!

5
задан Andrew 3 April 2011 в 02:44
поделиться