4

我正在开发一个具有大量命令行交互的系统。有时甚至通过 SSH。命令有时可能需要长达 30 分钟才能完成。

目前,我正在排除system对执行该系统调用的对象的大多数调用。例如:

class BackupBuilderTest < ActiveSupport::TestCase
  test "it calls the backup utility over ssh" do
    BackupBuilder.expects(:system).with("ssh foo@bar backup").returns(true)
    BackupBuilder.perform(:id => @backup.id)
  end
end

BackupBuilder
  def perform
    system("ssh foo@bar backup")
  end
end

然而,像这样的命令ssh foo@bar backup可能会在很多级别上失败,并且会输出大量数据,我会捕获这些数据并采取行动。运行也需要很长时间;在集成测试中不是一件好事,在单元测试中是不可接受的。我想运行它,而不运行所有实际ssh和备份。

对于 HTTP,有VCR,它几乎完全符合我在 CLI 调用中想做的事情。有什么东西吗?还是我错过了一些允许我这样做的模式或常见的存根技巧?

4

1 回答 1

1

这是有人使用 cram 采取的一种方法:

http://pbrisbin.com/posts/mocking_bash

于 2013-09-08T06:47:16.630 回答