Tôi có một ứng dụng dòng lệnh sử dụng thor để xử lý việc phân tích các tùy chọn. Tôi muốn đơn vị kiểm tra chức năng dòng lệnh chống lại mã với đơn vị kiểm tra và/hoặc minitest. Tôi không thể tìm ra cách đảm bảo mảng ARGV (thường sẽ giữ các tùy chọn từ dòng lệnh) giữ các tùy chọn kiểm tra của tôi để chúng có thể được kiểm tra dựa trên mã.đơn vị kiểm tra mã của ứng dụng dòng lệnh ruby - cách mô phỏng/vượt qua
Mã ứng dụng cụ thể:
# 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
Các thực thi
# bin/myapp
Các thử nghiệm file
# 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
tôi đã có thể vượt qua một mảng vào argv trong lớp kiểm tra, nhưng một khi tôi gọi Myapp/Lệnh/Xây dựng ARGV dường như trống. Tôi cần phải chắc chắn rằng các mảng ARGV đang nắm giữ 'xây dựng' và 'html' để cho các Xây dựng lệnh để làm việc và điều này để vượt qua.
Cảm ơn, Dave! Chính xác những gì tôi đang tìm kiếm. Trong thời gian chờ đợi, tôi đọc cuốn sách của bạn [Xây dựng các ứng dụng dòng lệnh tuyệt vời trong Ruby] (http://pragprog.com/book/dccar/build-awesome-command-line-applications-in-ruby). ;-) Tôi thực hiện aruba với dưa chuột để ít nhất có được thử nghiệm chấp nhận đi. –