2016-05-02 2 views
0

Я новичок в RSpec и рубин и у меня возникают проблемы написания тест на следующий метод с использованием двойников и т.д.Как проверить этот метод с помощью RSpec?

def choices player1_choice, player2_choice 
    @choices_array = [player1_choice, player2_choice] 
end 

Я пытался несколько способов, но не могут получить это право. Любая помощь приветствуется.

ответ

3

Ниже приведен базовый модульный тест для этого метода. Для этого метода вам не нужно использовать double.

describe YourClassName do 

    context "#choices" do 

    it "should return an array with 2 player choices" do 
     player1_choice = "a" 
     player2_choice = "b" 
     output = choices(player1_choice, player2_choice) 
     expect(output.count).to eq(2) 
     expect(output[0]).to eq(player1_choice) 
     expect(output[1]).to eq(player2_choice) 
    end 

    end 

end 

Парных/окурков обычно используются вокруг методов/объектов, которые содержат сложные операции, такие как подключение к сети, интеграции с 3-сторонней библиотекой без деталей реализации и т.д.

0

Кристофера прав в том, что вы не Для этого вам нужно использовать двойники. Однако я не согласен с его использованием более чем одного утверждения за тест. Обычно это считается плохой практикой, и я думаю, что здесь нет необходимости.

Кроме того, что именно вы хотите проверить? Метод, который вы написали, необычен. В любом случае, не зная о своих намерениях, невозможно понять, как лучше всего действовать. Тем не менее, вот испытание на один-утверждение, что по существу обеспечивает такой же охват испытания как несколько утверждений Кристофера:

it "returns an array of two player_choices" do 
    result = ["a", "b"] 
    expect(choices("a", "b")).to eq result 
end 
+0

Это правда, что это лучше просто ожидать весь массив, но это определенно не так, что тест должен иметь только один ожидание. Это бессмысленный мей, который приводит к раздутым и медленным наборам тестов. –

+0

Я согласен с тем, что некоторые ожидания немного избыточны, но для полноты лучше проверить каждый объект в каждой позиции, чтобы проверить правильность и порядок элементов массива. Я не согласен с тем, что одно ожидание - это норма. Это может быть рекомендация, но более сложные интеграционные тесты, вероятно, потребуют 2+ ожиданий. –

Смежные вопросы