免責事項:私はRSpecとTDDを一般的に使い慣れています。RSpec関数内で初期化されたオブジェクト上のany_instanceスタブブック
コマンドを受け取り、それを処理するクラスを生成するコマンドラインインターフェイスをプログラムに書きたいと思います。プログラムの動作方法は、gitやsvnのようなツールに似ています。つまり、 "srs init"を渡してプログラムを初期化したり、 "srs add"を使って何かを追加したりすることができます。
だから私はARGVをとり、次のようになり、特定のハンドラにそれを渡したクラスを持っている:
class CLI
def run!(*arguments)
command = arguments.shift
case command
when "init"
CLI::Init.new.run!(*arguments)
end
end
end
は私の初期化ハンドラは次のようになります。
class CLI
class Init
def initialize()
end
def run!(*arguments)
end
end
end
をI 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!
への呼び出しを置き換える場合は、それが通過するが、 any_instanceだけdescribe
ブロック内に構築/定義されたインスタンス上で動作しますが、私は本当にわからないかのように
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
i.e.:-に見えます。私のrun!
関数内で構築されたインスタンスに対してクラスメソッドが呼び出されたかどうか、または最初にこの機能をテストするためのより良い方法を誰かが私にどのように指導してもらえれば、私は最も感謝しています。
どのように失敗しますか?トレースを表示できますか?あなたのコードは一目瞭然です。 – x1a4
@ x1a4、あなたのコメントを読んだ後もう一度見て、あなたが正しいです!私はこの投稿のコードを簡略化していました。単純化されたコードは正常に動作します。テストする必要があります。投稿前に同じ方法で失敗しました。私の8時間制限が切れたときの問題点を説明する回答を掲載します。 – danielpwright