我正在编写一个命令行命令,但想对其进行 TDD。我将创建和删除文件,并想知道是否有沙盒测试 gem 或类似的东西。我正在使用 ruby 和 rspec。
问问题
333 次
3 回答
2
取决于您要做什么,但我通过模拟文件系统和 STDIN/STDOUT 来测试我的大部分命令行 Ruby。使用依赖注入,我经常会得到以下结果:
describe Add do
it 'writes the result to standard out' do
console = mock('STDOUT')
console.should_receive(:puts).with('5')
Add.new(console).execute(3,2)
end
end
class Add
def initialize(out = STDOUT)
@out = out
end
def execute(command_line_args)
@out.puts(command_line_args.inject(:+))
end
end
Add.new.execute(ARGS)
通过使用默认值,我可以在测试中注入,但将其排除在生产代码之外。
希望有帮助!
布兰登
于 2012-06-04T00:06:05.420 回答
0
生成器生成的模板newgem
install_cucumber
使用了我非常喜欢的模式。查看它创建的 support/env.rb 和 support/common.rb 文件:
- https://github.com/drnic/newgem/blob/master/rubygems_generators/install_cucumber/templates/features/support/env.rb.erb
- https://github.com/drnic/newgem/blob/master/rubygems_generators/install_cucumber/templates/features/support/common.rb
在测试中使用它看起来像这样:
in_tmp_folder do
# The current directory is now a generated tmp folder.
# If you stick to relative paths, everything you do in here should be safe
end
上面链接的文件用于在黄瓜测试中使用它,但它可以很容易地适应您正在使用的任何框架。上面的 env.rb 会在每次测试开始前删除 tmp 文件夹。
于 2012-06-16T21:46:26.533 回答
0
于 2012-06-16T21:47:35.393 回答