测试复杂的方法

ste*_*her 5 ruby testing rspec

我正在进行一个checkers实现,我有几十个容易测试的方法,但我不知道如何测试我的主#play_game方法.我的大多数方法都很容易确定输入和输出,因此很容易测试,这种方法是多方面的,并且实际上没有容易辨别的输出.这是代码:

def play_game
    puts @gui.intro

    while(game_over? == false)
      message = nil
      @gui.render_board(@board)
      @gui.move_request
      player_input = gets 
      coordinates = UserInput.translate_move_request_to_coordinates(player_input) 

      message = MoveCheck.move_validator(coordinates[0], coordinates[1], coordinates[2], coordinates[3])
      puts message unless (message.nil? or message == "jumping move")
      if(message == nil or message == "jumping move")
        @current_player = switch_player unless (message == "jumping move" and jump_available? == true)
      end
    end
    puts @gui.display_game_ending_message  
  end
Run Code Online (Sandbox Code Playgroud)

那么,如何进行测试(使用RSpec的),或者我应该不用担心,真正对我,否则全面的测试?

cde*_*zaq 6

一切play_game都是在运行游戏循环.你真正寻找测试是什么情况里面的游戏循环.最简单的方法是将游戏循环的内容分解为更容易测试的方法.

一旦你将游戏循环作为一系列方法,你就可以更容易地单独测试它们中的每一个.

  • 绝对!您还应该考虑这样一个事实,即并非所有东西都可以轻松测试,并且不应该测试所有内容.务实地测试什么...将逻辑分解为可测试的不同方法.如果你有一个打印消息的方法,然后调用一个重负荷的方法并反复做,那么考虑不测试它,如果它不是很大并考虑测试底层方法.但是,您应该考虑测试整个流程(按顺序调用方法A,B,C等).我希望这是有道理的......否则我可以用例子详细说明. (2认同)
  • @vinnybad:是的,你可以毫无疑问地改进这个主循环并将其拆分成更独立的方法,但最后还必须测试游戏的主要逻辑,否则你最终会得到一堆小方法.很好,一个破碎的主循环! (2认同)