我正在开发一个具有大量命令行交互的系统。有时甚至通过 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 调用中想做的事情。有什么东西吗?还是我错过了一些允许我这样做的模式或常见的存根技巧?