Интерфейс командной строки модульного тестирования - PullRequest
1 голос
/ 14 ноября 2011

Я использую зажим - инфраструктуру командной строки для моего приложения ruby ​​и не уверен, как инициировать мои объекты зажима для модульного тестирования. Мой объект зажима выглядит так

class myCommand < Clamp::Command
  parameter "first", "first param"
  parameter "second", "second param"

  def execute
    #Data
  end
end

И запускается через командную строку, вот так

$~> myCommand first second

На данный момент в моих тестах rspec мне нужно установить свойства объектов напрямую, как это сделано.

  before(:each) do
   $stdout = StringIO.new
   @my_command = myCommand.new("")
   @my_command.first= "first"
   @my_command.second= "second"
 end

Похоже, это не правильный способ инициировать объекты зажима для тестирования, но я не уверен в правильном способе сделать это. Интересно, есть ли у кого-нибудь идеи. Спасибо

1 Ответ

2 голосов
/ 14 ноября 2011

Итак, что вы делаете:

  • создание экземпляра команды
  • установка атрибутов для него
  • вызов #execute

Это прекрасный способ проверить команду Clamp и, вероятно, лучший способ для модульного тестирования логики вашего #execute метода.

Если вы хотите проверить синтаксический анализ аргументов командной строки, вы можете использовать метод #parse и проверить значения атрибутов, например,

before do
  @command = MyCommand.new("my")
end

describe "#parse" do

  before do
    @command.parse(["FOO", "BAR"])
  end

  it "sets attribute values" do
    @command.first.should == "FOO"
    @command.second.should == "BAR"
  end

end

Но это начинает тестировать сам Clamp, а не ваш собственный код ... так что я, вероятно, не стал бы беспокоиться.

Если вы хотите протестировать как синтаксический анализ, так и выполнение, попробуйте что-то вроде:

describe ".run" do
  context "with two arguments" do
    it "does something useful" do
      MyCommand.run("cmd", ["ARG1", "ARG2"])
      # ... test for usefulness
    end
  end
end

Опять же, то, как вы сейчас тестируете, прекрасно.Я надеюсь, что это помогает.

...