首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在产生的对象上调用的测试方法

在产生的对象上调用的测试方法
EN

Stack Overflow用户
提问于 2010-05-11 22:51:32
回答 2查看 205关注 0票数 0

我有以下控制器测试用例:

代码语言:javascript
运行
复制
def test_showplain
  Cleaner.expect(:parse).with(@somecontent)
  Cleaner.any_instance.stubs(:plainversion).returns(@returnvalue)

  post :showplain, {:content => @somecontent}

end

这种方法工作得很好,除了我希望"stubs(:plainversion)“是一个"expects(:plainversion)”。

下面是控制器代码:

代码语言:javascript
运行
复制
def showplain
   Cleaner.parse(params[:content]) do | cleaner |
      @output = cleaner.plainversion
   end
end

而Cleaner很简单:

代码语言:javascript
运行
复制
class Cleaner

   ### other code and methods ###

   def self.parse(@content) 
     cleaner = Cleaner.new(@content)
     yield cleaner
     cleaner.close
   end

   def plainversion
      ### operate on @content and return ###
   end

end

同样,我不知道如何可靠地测试"parse“方法提供的"cleaner”。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2010-05-13 23:51:51

这有点棘手。最简单的方法是将问题分成两部分:控制器的测试和控制器的测试。

您已经对控制器集进行了测试--只需删除对普通版本调用的期望。

然后,您需要单独测试Cleaner.parse方法。

代码语言:javascript
运行
复制
cleaner = Cleaner.new('x');
cleaner.expects :close

Cleaner.expects(:new).returns(cleaner)

called_with = nil
Cleaner.parse('test') do |p|
  called_with = p
end
assert_equal p, cleaner

这并不是很清楚到底发生了什么。这让我觉得还有一个更简单的版本。cleaner可以只是一个简单的函数,它接受一个字符串并返回另一个字符串吗?跳过所有的让步和变量作用域?这将更容易测试。

票数 0
EN

Stack Overflow用户

发布于 2010-12-02 19:36:32

您可能会发现Mocha::Expectation#yields的文档很有用。

我已经尝试展示了如何在this gist中做你想做的事情。请注意,我必须对代码进行一些调整,使其成为自包含的runnable测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2811710

复制
相关文章

相似问题

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