知道如何使用rspec在ruby中编写命令行应用程序吗?
如何测试驱动命令应用程序。
答案 0 :(得分:6)
如果要运行命令,可以在命令周围使用反引号并返回一个字符串:
`ruby /path/to/my_command.rb arg1 arg2`.should == "something"
但我个人会将这种测试方式限制在非常有限的测试子集中。这些是集成测试,不仅仅是单元测试,这并不意味着你不应该编写它们,但你应该首先测试稍低的级别。
然而,能够在较低级别测试命令需要以易于从中拉出单个单元的方式对其进行构造。如果你的脚本是一个很大的过程脚本,那么你可能做不了多少,但如果它由代表它将运行的各种命令的类组成,你可以测试这些类而不在shell中执行命令。
答案 1 :(得分:2)
您应该查看aruba,它允许您使用Cucumber驱动命令行应用程序开发,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"
Aruba为您提供第二步和第三步,您提供其他步骤:
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
测试命令行应用程序有很多棘手的问题,但是aruba是一个很大的帮助
答案 2 :(得分:0)
观看Ryan Bigg的pilot screencast,它提供了一些关于测试驾驶香草红宝石应用的好建议