首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby元编程

Ruby元编程
EN

Stack Overflow用户
提问于 2013-10-03 05:50:51
回答 2查看 164关注 0票数 1

我有一个返回给定符号的价格的方法,我正在为该方法编写一个测试。

这是我的测试

代码语言:javascript
复制
 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

这是我的方法.

代码语言:javascript
复制
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方法,但是当我调用它时,调用发生在主类中的方法上,而不是在测试类中。

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

EN

回答 2

Stack Overflow用户

发布于 2013-10-03 06:20:37

而不是重新定义内部的方法,您需要模拟它。

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

代码语言:javascript
复制
@asset.expects(:retrieve_price_for_a_symbol).with('YHOO').returns(33.97)
票数 2
EN

Stack Overflow用户

发布于 2013-11-03 15:26:12

假设你真的不想嘲笑你正在测试的方法.

您目前正在测试类的实例上定义模拟。您可以将模拟直接添加到@asset对象中:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19151720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档