单元测试命令行界面

时间:2011-11-14 08:49:20

标签: ruby unit-testing command-line-arguments

我正在使用clamp - 我的ruby应用程序的命令行框架,并且不确定如何启动我的clamp对象进行单元测试。我的夹子对象看起来像这样

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 个答案:

答案 0 :(得分:2)

所以,你正在做的是:

  • 创建命令实例
  • 在其上设置属性
  • 致电#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

但是,您目前正在测试的方式非常好。我希望有所帮助。