【问题标题】:How should I test this method using RSpec?我应该如何使用 RSpec 测试这种方法?
【发布时间】:2016-05-03 06:34:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    这是此方法的基本单元测试。这种方法不需要使用双精度数。

    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 方库集成等。

    【讨论】:

      【解决方案2】:

      Christopher 是对的,因为您不需要为此使用双打。但是,我不同意他在每个测试中使用多个断言。这通常被认为是不好的做法,我认为这里没有必要。

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

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

      【讨论】:

      • 确实,最好只期望整个数组,但绝对不是一个测试必须只有一个期望。这是一个毫无意义的模因,会导致测试套件臃肿而缓慢。
      • 我同意有些期望有点多余,但为了完整起见,最好检查每个位置的每个对象,以验证数组元素的有效性和顺序。我不同意一种期望是常态。这可能是一个指导方针,但更复杂的集成测试可能需要 2 个以上的期望。
      猜你喜欢
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多