コマンドラインのやり取りが多いシステムを開発しています。場合によっては 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 呼び出しでやりたいことをほぼ正確に実行します。これには何かありますか?それとも、これを可能にするパターンや一般的なスタブのトリックが欠けていますか?