使用参数测试 CLI
Test CLI with parameters
我认为这是非常新的东西,但我正在通过实践学习 Ruby,并且我正在开发一个小型 CLI 工具,它接收几个参数以便正确地完成它的工作。这是我当前的工作流程:
我想测试(使用 Minitest)所有可能的流程:
- 如果 ARGV.count != 2
,则以 0 退出并显示帮助消息
- 如果第一个参数不正确则以 1 退出
- 如果第二个参数不正确则以 1 退出
- 如果两个参数都不正确,则以 1 退出
- 如果所有参数都正确,则以 0 退出并执行操作
现在,如果我 运行 测试,我唯一看到的是帮助输出,因为没有传递任何参数。
所以,有几个问题:
- 如何在测试中向主程序传递参数?
- 如何测试输出? (我正在使用
puts
)
谢谢!
图表不错!
您可以使用像 aruba 这样的助手 https://github.com/cucumber/aruba
或深入研究 ruby 内部结构,使其随心所欲!
# test.rb
pseudoIO = StringIO.new
$stdout = pseudoIO
puts "hi #{ARGV.join(', ')}"
ARGV.replace ["file1"]
puts "now its #{ARGV.join(', ')}"
abort "captured: #{pseudoIO.string}"
输出应该是
ruby text.rb "whutup"
# => captured: hi whutup
# => now its file1
我认为这是非常新的东西,但我正在通过实践学习 Ruby,并且我正在开发一个小型 CLI 工具,它接收几个参数以便正确地完成它的工作。这是我当前的工作流程:
我想测试(使用 Minitest)所有可能的流程:
- 如果 ARGV.count != 2 ,则以 0 退出并显示帮助消息
- 如果第一个参数不正确则以 1 退出
- 如果第二个参数不正确则以 1 退出
- 如果两个参数都不正确,则以 1 退出
- 如果所有参数都正确,则以 0 退出并执行操作
现在,如果我 运行 测试,我唯一看到的是帮助输出,因为没有传递任何参数。
所以,有几个问题:
- 如何在测试中向主程序传递参数?
- 如何测试输出? (我正在使用
puts
)
谢谢!
图表不错!
您可以使用像 aruba 这样的助手 https://github.com/cucumber/aruba
或深入研究 ruby 内部结构,使其随心所欲!
# test.rb
pseudoIO = StringIO.new
$stdout = pseudoIO
puts "hi #{ARGV.join(', ')}"
ARGV.replace ["file1"]
puts "now its #{ARGV.join(', ')}"
abort "captured: #{pseudoIO.string}"
输出应该是
ruby text.rb "whutup"
# => captured: hi whutup
# => now its file1