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

誰かがクラムを使用して取ったアプローチは次のとおりです。

http://pbrisbin.com/posts/mocking_bash

于 2013-09-08T06:47:16.630 に答える