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 回答