いくつかのシェル コマンドを自動化する 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
ああ、私の質問には答えたようですが、より良い提案があれば喜んで聞かせてください。