我有一个完全独立的Ruby文件,可以从标准输入读取并写入标准输出。
我有一些要尝试的测试用例。如何将我的输入传递到标准输入到文件,然后根据预期结果测试标准输出?
作为一个例子,这是我已经弄清楚的东西:
有一个文件可以从标准输入中读取数字,将其平方后再写入标准输入
square.rb
:
#!/usr/local/bin/ruby -w
input = STDIN.read
# square it
puts input.to_i ** 2
完成pass_input_to_file
的{{1}}方法:
test.rb
答案 0 :(得分:2)
调用红宝石脚本时,可以使用Ruby Open3 Library提交STDIN。
require 'open3'
def pass_input_to_file(input)
output, _status = Open3.capture2('path_to_script', :stdin_data => input)
output
end
答案 1 :(得分:1)
最简单的测试方法可能是让程序查看是否先传递了任何参数。像这样:
#!/usr/local/bin/ruby -w
input = ARGV[0] || STDIN.read
# square it
puts input.to_i ** 2
然后可以进行测试:
def pass_input_to_file(input)
`path/to/file #{input}`.to_i
end
否则,我将使用expect之类的东西来自动化子外壳。
此外,对于更复杂的程序,使用OptionParser或CLI gem可能比直接查看ARGV要好。