上我有以下控制器的测试案例:测试方法叫做产生对象
def test_showplain
Cleaner.expect(:parse).with(@somecontent)
Cleaner.any_instance.stubs(:plainversion).returns(@returnvalue)
post :showplain, {:content => @somecontent}
end
这工作得很好,但我想要的“存根(:plainversion)”是一个“希望(:plainversion)” 。
这里的控制器代码:
def showplain
Cleaner.parse(params[:content]) do | cleaner |
@output = cleaner.plainversion
end
end
和清洁很简单:
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
同样,我无法弄清楚如何可靠地测试的“清洁剂”,即提供从“解析”方法。有什么建议么?
解析方法的好处在于它提供了一个完全可以使用的清理器,并确保调用close。这在Cleaner类中得到了充分测试。尽管上面的代码显示了使用Cleaner来检索“plainvesion”,但还有其他操作可以使用完全准备好的Cleaner来完成。 在控制器中,我们可以创建一个新的清洁器,确保它完全被管理,使用它,然后确保我们关闭它。但看起来如此。 。 。不是Rubyish。特别是当使用解析方法非常方便时,请使用Cleaner并完成它。 – 2010-05-14 14:20:34
也许如果您只是将@output从块中取出并传回给调用者,那么您的控制器方法将更容易测试 - 只需测试清洁器是否已被调用即可完成。如你所说,你的清洁剂在其他地方进行过测试 – ndp 2010-05-14 14:44:53