0

我正在编写一个命令行命令,但想对其进行 TDD。我将创建和删除文件,并想知道是否有沙盒测试 gem 或类似的东西。我正在使用 ruby​​ 和 rspec。

4

3 回答 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 文件:

在测试中使用它看起来像这样:

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

您可能还想看看sandbox宝石。

gem install sandbox

示例用法在这里:https ://github.com/bdimcheff/sandbox

于 2012-06-16T21:47:35.393 回答