2011-11-19 61 views
2

任何想法如何在rspec中使用ruby編寫命令行應用程序?如何在帶RSpec的Ruby中編寫命令行應用程序?

如何測試驅動器的命令應用程序。

+0

我真的不知道你問這裏有什麼,RSpec的是一個測試框架,沒有那麼你用它來從字面上寫你的應用程序。 –

+0

那麼什麼是測試驅動它..? – pankajdoharey

+0

我不完全確定你想要在那裏問什麼,對不起。 –

回答

2

您應該看看aruba,它允許您使用Cucumber驅動命令行應用程序開發,在封面下使用RSpec。它處理正在執行的程序並捕獲它們的輸出和退出狀態,這對你自己來說可能很痛苦。舉個例子:

Given the file "foo.txt" exists 
When I successfully execute `cp foo.txt bar.txt` 
Then a file named "bar.txt" should exist 
And the file "bar.txt" should the same contents as "foo.txt" 

阿魯巴爲您提供的第二步和第三步,你所提供的其他:

CONTENTS = 'some contents' 

Given /^the file "([^"]*)" exists$/ do |file| 
    File.open(file,'w') { |file| file.puts(CONTENTS) } 
end 
Then /^the file "([^"]*)" should the same contents as "([^"]*)"$/ do |dest_file,source_file| 
    contents = File.read(dest_file) 
    contents.should == CONTENTS 
end 

還有很多更棘手的問題,以測試命令行應用程序,但阿魯巴是一個大幫助

+0

可能是我的問題沒有妥善安置,但這是我一直在尋找的感謝! – pankajdoharey

6

如果你想運行就可以使用周圍的命令反引號和具有字符串的命令返回:

`ruby /path/to/my_command.rb arg1 arg2`.should == "something" 

但我個人這種風格的測試限制在你的測試非常有限的子集。這些都是集成測試,不僅僅是單元測試,這並不意味着你不應該寫它們,但你應該先測試一個稍低的級別。

但是,如果能夠在較低級別測試您的命令,則需要以易於從中抽取單個單元的方式對其進行構造。如果你的腳本是一個很大的程序腳本,那麼你可能做不了多少事情,但是如果它是由表示它將運行的各種命令的類組成的,那麼你可以在shell中不執行命令的情況下測試這些類。

相關問題