我应该如何使用RSpec测试此方法?

时间:2016-05-02 20:37:21

标签: ruby rspec

我是rspec和ruby的新手,并且在使用双打等方法编写以下方法的测试时遇到问题。

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

我尝试了几种方法,但无法做到正确。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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

双打/存根通常用于包含复杂操作的方法/对象,例如网络连接,与没有实现细节的第三方库集成等。

答案 1 :(得分:0)

克里斯托弗说得对,你不需要为此使用双打。但是,我不同意他每次测试使用多个断言。这通常被认为是不好的做法,我认为这里没有必要。

另外,您究竟想测试什么?你写的方法很不寻常。无论如何,如果不进一步了解你的意图,就不可能知道如何最好地进行。但是,这是一个单断言测试,基本上提供与Christopher的多个断言相同的测试覆盖率:

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