无法理解rspec测试

时间:2014-11-27 20:52:10

标签: ruby rspec

我的作业涉及在ruby中编写代码以满足特定rspec测试的要求,但我真的很难理解这一点:

it "should check for a winner with top row" do
            @game.winner = nil
            @game.clearmatrix
            @game.setmatrixvalue(0,  "0")
            @game.setmatrixvalue(1,  "0")
            @game.setmatrixvalue(2,  "0")
            @game.checkwinner.should == check_winner && @game.winner.should_not == nil
        end

该计划将成为一个不错的选择。穿过(tic tac toe?)游戏,上面的测试专门检查是否有人在顶行中有所有3个空格(还有各种其他测试来检查其他组合)。

现在,我假设我应该创建一个名为winner的新方法,它应该有一些默认值?

我很困惑为什么我要将clearmatrix称为checkwinner方法的一部分......当然,如果我清除矩阵,那么程序将无法检查是否有'赢家?

测试的最后一行是我真正努力理解的主要部分。我认为我需要在checkwinner中有一个if语句,如果所有3个空格都相同,则返回true,但是check_winner是什么?它应该是另一种方法吗?为什么我会设置胜利者=零,然后需要获胜者不是零?

这是我到目前为止所做的其他测试(全部通过)以防万一:

def start
            #Calls method to display appropriate messages.
            messages
        end

        def created_by
            return "myname"
        end

        def student_id
            return mystudentid #this is an integer
        end

        def messages
            @output.puts "Welcome to Noughts and Crosses!"
            @output.puts "Created by:Stephen Mitchell"
            @output.puts "Starting game..."
            @output.puts "Player 1: 0 and Player 2: 1"
        end

        def setplayer1
            @player1 = 0
        end

        def setplayer2
            @player2 = 1
        end

        def clearmatrix
            @matrix = ["_", "_", "_", "_", "_", "_", "_", "_", "_"]
        end

        def getmatrixvalue(n)
            @matrix[n]
        end

        def setmatrixvalue(i, v)
            i = 1
            v = "0"
            @matrix[i] = "0"
        end

        def displaykey(matrix)
            @matrix = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
            @output.puts "Table key:\n|#{matrix[0]}|#{matrix[1]}|#{matrix[2]}|\n|#{matrix[3]}|#{matrix[4]}|#{matrix[5]}|\n|#{matrix[6]}|#{matrix[7]}|#{matrix[8]}|\n"
        end

        def displaymatrix
            @matrix = ["_", "_", "_", "_", "_", "_", "_", "_", "_"]
            @output.puts "Table status:\n|#{matrix[0]}|#{matrix[1]}|#{matrix[2]}|\n|#{matrix[3]}|#{matrix[4]}|#{matrix[5]}|\n|#{matrix[6]}|#{matrix[7]}|#{matrix[8]}|\n"
        end

        def finish
            @output.puts "Finishing game..."
        end

        def displaymenu
            @output.puts "Menu: (1)Start | (2)New | (9)Exit\n"
        end

        def checkwinner
        end

1 个答案:

答案 0 :(得分:0)

在测试中,您手动设置单元格值。 在您的规范中,您可以设置

check_winner = "0"

在Game类中,checkwinner方法可以是这样的:

def checkwinner
  if (matrix[0] == matrix[1]) && (matrix[1] == matrix[2])
    matrix[0]
  elsif # conditions for all other win cases
  end
end

clearmatrix方法只需在手动设置之前清除游戏区域。