采用摩卡嘲笑或存根远跨网络进入一个功能非常有用:如何在单元测试中用其他方法临时替换方法?
def test_something
NetworkClass.stub(:fetch_something, "contrived example")
assert_equal "contrived example", NetworkClass.fetch_something
end
但更多的时候,我的网络交叉功能需要一定的投入,以及输入影响是什么函数返回。对于我的单元测试,我只准备了一个Hash,其中包含我的测试套件需要运行的输入和输出。问题是,现在我不能再使用Mochas .stub
或.expects
,因为它们不允许我替换实际执行某些操作的函数。
目前我在做这样的事情:
def setup
@subject = NetworkClass.new
test_data = fetch_test_data
@subject.define_singleton_method(:fetch_something) { |input|
test_data[input] or fail "Unexpected stub input: #{input}"
}
end
但这永久改变的主题,所以我不能使用此方法桩模块函数或类方法。
有没有办法用另一种方法“临时”替换方法,就像摩卡的.stub
一样简单?
如果有人想告诉我,这是一个不好的方式来测试并告诉我一个更好的方法,我想我也会接受这个答案。这一直在困扰我一段时间。为了避免这种
一个显而易见的方法是存根在考虑特定输入每个测试功能的方法,但是在我看来,像很多额外的“样板”的测试代码没有实际的好处。另外,通过这种方式,我可以确定,我不会忘记在某处存储方法,并且每次运行我的测试套件时都会意外地通过网络。
我想答案是声明另一个类相同的接口。至少我是这么做的。 – Casey