Ruby 元编程

标签 ruby metaprogramming

我有一个返回给定交易品种价格的方法,我正在为该方法编写测试。

这是我的测试

 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 方法,但是当我调用它时,调用发生在主类中的方法而不是测试类中。

如何将该方法添加到测试的元类中以及如何调用它?请帮忙。

最佳答案

不需要重新定义里面的方法,你需要把它mock出来。

将测试中的方法定义替换为

@asset.expects(:retrieve_price_for_a_symbol).with('YHOO').returns(33.97)

关于Ruby 元编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19151720/

相关文章:

ruby - 测试错误处理的正确方法是什么?

ruby - Sinatra 应用程序的扩展

ruby - Heroku 错误 : "Could not find an executable ["phantomjs"] on your path.“

ruby - 将一个 erb 文件包含到另一个文件中

map 和 multimap 之间的 C++ 模板特化

c++ - 有没有办法指定和使用属于 C++ 类的所有数据成员的列表

ruby-on-rails - 无法运行 "mate .rspec"

c++ - 遍历 boost::mpl::list 的惯用方法是什么?

python - 使用元类覆盖复杂内置方法

C 宏的创造性/有趣用途;元编程