1

特定のシンボルの価格を返すメソッドがあり、そのメソッドのテストを書いています。

これは私のテストです

 def setup
   @asset = NetAssetValue.new
 end

 def test_retrieve_price_for_symbol_YHOO
   assert_equal(33.987, @asset.retrieve_price_for_a_symbol('YHOO'))
 end

 def test_retrive_price_for_YHOO        
   def self.retrieve_price_for_a_symbol(symbol)
     33.77
   end

   assert_equal(33.97, @asset.retrieve_price_for_a_symbol('YHOO'))
 end

これが私の方法です。

def retrieve_price_for_a_symbol(symbol)
  symbol_price = { "YHOO" => 33.987, "UPS" => 35.345, "T" => 80.90 }
  raise Exception if(symbol_price[symbol].nil?)
  symbol_price[symbol]
end

テストクラスに同じメソッドを記述してメソッドをモックしようとしてretrieve_price_for_a_symbolいますが、呼び出すと、テストクラスではなくメインクラスのメソッドが呼び出されます。

そのメソッドをテストからメタクラスに追加するにはどうすればよいですか?また、どのように呼び出すのですか? 助けてください。

4

2 に答える 2

2

内部でメソッドを再定義する代わりに、モックアウトする必要があります。

テスト内のメソッド定義を次のように置き換えます

@asset.expects(:retrieve_price_for_a_symbol).with('YHOO').returns(33.97)
于 2013-10-03T06:20:37.860 に答える
2

テストしているメソッドを本当にモックしたくないと仮定すると...

現在、テスト クラスのインスタンスでモックを定義しています。@assetモックをオブジェクトに直接追加できます。

def test_retrive_price_for_YHOO
  def @asset.retrieve_price_for_a_symbol(symbol)
    33.77
  end

  assert_equal(33.97, @asset.retrieve_price_for_a_symbol('YHOO'))
end
于 2013-11-03T15:26:12.413 に答える