Ruby MiniTest:测试在无限循环中运行

问题描述 投票:0回答:0

我想使用 MiniTest 测试以下代码。该代码测试用户是否提供了有效输入。

正在测试的代码:

def player_input(min, max)
  loop do
    user_input = gets.chomp
    verified_number = verify_input(min, max, user_input.to_i) if user_input.match?(/^\d+$/)
    return verified_number if verified_number
    puts "Input error! Please enter a number between #{min} or #{max}."
  end
end

def verify_input(min, max, input)
  return input if input.between?(min, max)
end

Mini测试代码: 测试代码用无效输入存根 :gets 方法。然后断言 player_input 方法的输出是一条错误消息。

def test_when_user_inputs_an_incorrect_value_runs_loop_once
  invalid_input = '11'
  @game_input.stub(:gets, invalid_input) do
    min = @game_input.instance_variable_get(:@minimum)
    max = @game_input.instance_variable_get(:@maximum)
    error_message = "Input error! Please enter a number between #{min} or #{max}."
    assert_output(error_message, "") { @game_input.player_input(min, max) }
  end
end

问题: 问题是因为我已将测试运行在无限循环中的 :gets 方法存根。如何在 MiniTest 中测试获取用户输入的简单循环?

谢谢

我尝试将代码更改为 STDERR.puts 以确保代码返回可以断言的标准错误。

ruby minitest
© www.soinside.com 2019 - 2024. All rights reserved.