gpt4 book ai didi

ruby - 如何测试其中包含 gets.chomp 的函数?

转载 作者:数据小太阳 更新时间:2023-10-29 06:55:40 24 4
gpt4 key购买 nike

我有一个像这样使用 gets.chomp 的简单函数:

def welcome_user
puts "Welcome! What would you like to do?"
action = gets.chomp
end

我想使用 ruby 内置的 TestCase 套件来测试它,如下所示:

class ViewTest < Test::Unit::TestCase
def test_welcome
welcome_user
end
end

问题是,当我运行那个测试时,gets.chomp 停止了测试,因为它需要用户输入一些东西。有没有一种方法可以仅使用 ruby 来模拟用户输入?

最佳答案

您可以创建一个 pipe并将其“读取端”分配给 $stdin。写入管道的“写入端”然后模拟用户输入。

下面是一个使用小辅助方法 with_stdin 来设置管道的示例:

require 'test/unit'

class View
def read_user_input
gets.chomp
end
end

class ViewTest < Test::Unit::TestCase
def test_read_user_input
with_stdin do |user|
user.puts "user input"
assert_equal(View.new.read_user_input, "user input")
end
end

def with_stdin
stdin = $stdin # remember $stdin
$stdin, write = IO.pipe # create pipe assigning its "read end" to $stdin
yield write # pass pipe's "write end" to block
ensure
write.close # close pipe
$stdin = stdin # restore $stdin
end
end

关于ruby - 如何测试其中包含 gets.chomp 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16948645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com