rails控制器私有方法的功能测试

时间:2010-04-28 13:59:34

标签: ruby-on-rails ruby functional-testing private-methods

我的控制器中有一个私有方法。用于某些数据库更新。这个方法我从另一个控制器方法调用。它工作正常。

但是当我试图为该方法编写一个测试用例时,它正在绊倒我的函数中的访问(会话变量和参数)所有其他方法工作正常,问题只有私有方法吗?

在我的功能测试设置方法中,我也在设置会话。?

3 个答案:

答案 0 :(得分:3)

您应该避免测试私有方法。拥有公共/私有/受保护方法背后的“目标”是封装逻辑并使代码部分变得容易,而不必担心一个函数或类如何与另一个函数或类交互。

话虽如此,如果你仍然觉得需要测试你的私人方法,那么就有办法解决。我通过Jay Field's blog找到了这个效用函数:

class Class
  def publicize_methods
    saved_private_instance_methods = self.private_instance_methods
    self.class_eval { public *saved_private_instance_methods }
    yield
    self.class_eval { private *saved_private_instance_methods }
  end
end

检查链接的使用详情,看起来像是一种快速而简单的方法来完成您的目标。

答案 1 :(得分:1)

我喜欢Damien Wilson's suggestion。我的声明是你,“应该避免测试私人方法。”必要时,我声明该方法的公共版本:

class FooTest < Test::Unit::TestCase
  Foo.class_eval do
    def public_bar(*args, &block)
      private_bar(*args, &block)
    end
  end

  def test_bar
    assert_equal 42, Foo.new.public_bar
  end
end

答案 2 :(得分:0)

如何针对使您的私有(受保护)方法通过包装方法访问的子类进行测试?

class Controller

protected
  def your_private_method
    ...
  end

end


class SubclassForTest < Controller

  def testwrapper
    your_private_method
  end

end