我想使用 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 以确保代码返回可以断言的标准错误。