Mam aplikację wiersza polecenia, która używa thor do obsługi parsowania opcji. Chcę przetestować funkcjonalność wiersza poleceń pod kątem kodu z jednostką testową i/lub minitestem.jednostka testująca kod aplikacji wiersza poleceń - jak symulować/przekazywać ARGV
Nie mogę się dowiedzieć, jak upewnić się, że tablica ARGV (która normalnie przechowuje opcje z wiersza poleceń) przechowuje moje opcje testowe, aby można było je przetestować pod kątem kodu.
Konkretny kod aplikacji:
# myapp/commands/build.rb
require 'thor'
module Myapp
module Commands
# Define build commands for MyApp command line
class Build < Thor::Group
include Thor::Actions
build = ARGV.shift
build = aliases[build] || build
# Define arguments and options
argument :type
class_option :test_framework, :default => :test_unit
# Define source root of application
def self.source_root
File.dirname(__FILE__)
end
case build
# 'build html' generates a html
when 'html'
# The resulting html
puts "<p>HTML</p>"
end
end
end
end
wykonywalny
# bin/myapp
pliku testowego
# tests/test_build_html.rb
require 'test/unit'
require 'myapp/commands/build'
class TestBuildHtml < Test::Unit::TestCase
include Myapp::Commands
# HERE'S WHAT I'D LIKE TO DO
def test_html_is_built
# THIS SHOULD SIMULATE 'myapp build html' FROM THE COMMAND-LINE
result = MyApp::Commands::Build.run(ARGV << 'html')
assert_equal result, "<p>HTML</p>"
end
end
udało mi się przekazać tablicę do ARGV w klasie testowej ale kiedy zadzwonię do Myapp/Commands/Build, ARGV wydaje się być pusty. Muszę się upewnić, że tablica ARGV trzyma "build" i "html", aby polecenie Build działało i to się udało.
Dzięki, Dave! Dokładnie to, czego szukałem. W międzyczasie skończyłem czytać twoją książkę [Budowanie niesamowitych aplikacji wiersza poleceń w Ruby] (http://pragprog.com/book/dccar/build-awesome-command-line-applications-in-ruby). ;-) Zaimplementowałem arubę z ogórkiem, aby przynajmniej przeprowadzić testy akceptacyjne. –