单元测试ruby命令行应用程序的代码 – 如何模拟/传递ARGV

前端之家收集整理的这篇文章主要介绍了单元测试ruby命令行应用程序的代码 – 如何模拟/传递ARGV前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个命令行应用程序,它使用thor来处理选项的解析.我想用test-unit和/或minitest对代码进行命令行功能的单元测试.

我似乎无法弄清楚如何确保ARGV数组(通常会从命令行保存选项)保存我的测试选项,以便可以针对代码测试它们.

具体应用代码

  1. # myapp/commands/build.rb
  2. require 'thor'
  3.  
  4. module Myapp
  5. module Commands
  6.  
  7. # Define build commands for MyApp command line
  8. class Build < Thor::Group
  9. include Thor::Actions
  10.  
  11. build = ARGV.shift
  12. build = aliases[build] || build
  13.  
  14. # Define arguments and options
  15. argument :type
  16. class_option :test_framework,:default => :test_unit
  17.  
  18. # Define source root of application
  19. def self.source_root
  20. File.dirname(__FILE__)
  21. end
  22.  
  23. case build
  24.  
  25. # 'build html' generates a html
  26. when 'html'
  27.  
  28. # The resulting html
  29. puts "<p>HTML</p>"
  30. end
  31. end
  32. end
  33. end

可执行文件

  1. # bin/myapp

测试文件

  1. # tests/test_build_html.rb
  2.  
  3. require 'test/unit'
  4. require 'myapp/commands/build'
  5.  
  6.  
  7. class TestBuildHtml < Test::Unit::TestCase
  8. include Myapp::Commands
  9.  
  10. # HERE'S WHAT I'D LIKE TO DO
  11. def test_html_is_built
  12.  
  13. # THIS SHOULD SIMULATE 'myapp build html' FROM THE COMMAND-LINE
  14. result = MyApp::Commands::Build.run(ARGV << 'html')
  15. assert_equal result,"<p>HTML</p>"
  16. end
  17.  
  18. end

我已经能够在测试类中将数组传递给ARGV,但是一旦我调用Myapp / Commands / Build,ARGV似乎是空的.我需要确保ARGV数组持有’build’和’html’,以便Build命令工作并通过.

解决方法

设置ARGV并避免警告的最简单方法是:
  1. ARGV.replace your_argv

发现于http://apidock.com/ruby/Test/Unit/setup_argv/class

猜你在找的Ruby相关文章