【发布时间】:2016-05-03 06:34:18
【问题描述】:
我是 rspec 和 ruby 的新手,在使用双精度等方法编写以下方法的测试时遇到问题。
def choices player1_choice, player2_choice
@choices_array = [player1_choice, player2_choice]
end
我尝试了几种方法,但都无法做到。任何帮助将不胜感激。
【问题讨论】:
我是 rspec 和 ruby 的新手,在使用双精度等方法编写以下方法的测试时遇到问题。
def choices player1_choice, player2_choice
@choices_array = [player1_choice, player2_choice]
end
我尝试了几种方法,但都无法做到。任何帮助将不胜感激。
【问题讨论】:
这是此方法的基本单元测试。这种方法不需要使用双精度数。
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
Double/stubs 通常用于包含复杂操作的方法/对象,例如网络连接、与没有实现细节的 3rd 方库集成等。
【讨论】:
Christopher 是对的,因为您不需要为此使用双打。但是,我不同意他在每个测试中使用多个断言。这通常被认为是不好的做法,我认为这里没有必要。
另外,你到底想测试什么?你写的方法很不寻常。无论如何,如果不进一步了解您的意图,就不可能知道如何最好地进行。但是,这里有一个单断言测试,它基本上提供了与 Christopher 的多断言相同的测试覆盖率:
it "returns an array of two player_choices" do
result = ["a", "b"]
expect(choices("a", "b")).to eq result
end
【讨论】: