1

いくつかのシェル コマンドを自動化する Ruby ライブラリを作成しています。コマンドは、非常に複雑な一連のビジネス ロジックに依存します。

これらのシェル コマンドを生成するコードを単体テストしたいと考えています。どうすればよいかわかりません。コマンドの正確なテキストはあまり気にしませんが、コマンドがロジックの影響を受けていることを確認したいと思います。これはもちろん、単体テストの目的です。

私の現在のアイデアは、コマンドの生成を非常に薄いテンプレートのようなオブジェクト (または単なるテンプレート) にカプセル化し、シェル コマンドを生成する必要があるときにロジック コードでそれらのオブジェクトを呼び出させることです。テンプレートコード。これでもテンプレート コードはテストされていませんが、ロジックの検証ほど重要ではありません。基本的

class DirectoryMaker
  def initialize(generator)
    @generator = generator
  end
  def make_directory(name)
    if name=='baz'
      raise 'YOURE NOT ALLOWED TO DO THAT'
    else
      @generator.mkdir(name)
    end
  end
end

describe DirectoryMaker do
  it 'should produce a mkdir command' do 
    generator = double('Generator')
    generator.should_receive('mkdir').with('foo').and_return('')

    described_class.new(generator).make_directory('foo')
  end

  it 'should raise an exception when passed baz as a name' do
    expect {
      described_class.new(double('Generator')).make_directory('baz')
    }.to raise_error
  end
end

ああ、私の質問には答えたようですが、より良い提案があれば喜んで聞かせてください。

4

1 に答える 1

0

私はあなたを正しく理解しているかどうか確信が持てません。はい、コンソール出力(モデル)の抽象化である薄いレイヤーを作成できます。ロジック (コントローラー) がこの抽象化レイヤーから正しいオブジェクトを生成するかどうかをテストできます。テンプレートがモデル (ビュー) からの正しいシェル出力をレンダリングするかどうかをテストできます。しかし、何のために?ここで完全な MVC パターンが本当に必要ですか? 出力(文字列)を生成するロジックがあります。一部の入力パラメーターが目的の文字列を生成するかどうかをテストできないのはなぜですか?

于 2012-09-17T21:57:46.807 に答える