免責事項:私は一般的にRSpecとTDDに非常に慣れていないので、これを完全に間違った方法で行っている可能性があります。
コマンドを受け取り、それを処理するクラスを生成するコマンドラインインターフェイスをプログラムに記述したいと思います。プログラムの動作方法は、gitやsvnなどのツールに似ています。つまり、「srs init」を渡してプログラムを初期化したり、「srsadd」を渡してプログラムに何かを追加したりすることができます。
したがって、ARGVを受け取り、それを特定のハンドラーに渡すクラスがあります。これは次のようになります。
class CLI
def run!(*arguments)
command = arguments.shift
case command
when "init"
CLI::Init.new.run!(*arguments)
end
end
end
私のInitハンドラーは次のようになります。
class CLI
class Init
def initialize()
end
def run!(*arguments)
end
end
end
CLIクラスのルーティング機能のテストスイートを作成しようとしています。次を使用すると、RSpecが失敗します。
describe CLI do
it "should launch the Init handler if we pass init" do
CLI::Init.any_instance.should_receive(:run!)
CLI::run!(*["init"])
end
end
CLI::run!
ただし、への呼び出しをInitハンドラーの実行への直接呼び出しに置き換えると合格します。すなわち:-
describe CLI do
it "should launch the Init handler if we pass init" do
CLI::Init.any_instance.should_receive(:run!)
CLI::Init.new.run!(*[])
end
end
any_instanceは、describe
ブロック内で定義/構築されたインスタンスでのみ機能するように見えますが、よくわかりません。run!
関数内に構築されたインスタンスでクラスメソッドが呼び出されたことを確認する方法、または最初にこの機能をテストするためのより良い方法について、誰かが私にガイダンスを提供してくれるなら、私は最も感謝しています。