2016-01-13 67 views
3

the documentation RSpec的嘲弄维护者RSpec:'allow_any_instance_of'的替代选择是什么?

...阻止它有许多原因使用...

列出的理由似乎涉及expect版本的这一功能,但他们两者没有区别。

我可以看到为什么expect版本不鼓励,但allow版本似乎没有共享列出的问题。

好像使用allow版本是测试某些行为的最便捷方式。

例子:

我测试部分航线的授权。一种方法是在数据库中创建一个用户,但这似乎相当笨拙,我更愿意创建一个模拟对象并在授权调用期间返回它。此示例是测试使用复杂库的代码的特定情况,这些库分别进行了测试。

鉴于它气馁,有什么更好的方法?

回答

0

每你贴出来,不使用allow_any_instance_of的原因文档是它过于重手,可以掩盖潜在的代码味道,你可能会错过。有了这个说法,我仍然使用它...他们绝对不会提供替代方案,所以如果您需要这些功能并考虑其他选项或其他方式来编写测试并针对这些测试做出决定,请使用它。

+0

我发现缺少的文件,这就是为什么我问的问题。特别是它没有区分“允许”和“期望”的变化,也没有提出替代方案。 – agbodike

+0

我相信文档的作者不鼓励这些方法的'allow'和'expect'版本,尽管他们在例子中使用了'expect'。 他们提供了一个使用'Widget'的例子,如: ''' 因此,有一些语义混淆边缘情况。例如,在expect_any_instance_of(窗口小部件)。为了接收(:名称).twice它是不明确的特定实例是否预期接收名称两次,或如果两个接收总的预期。 (是前者。) ''' 相反,尝试通过在合作者的模拟并在其上制作的期望,而不是任何实例。 –

+0

不幸的是,除了改变你编写测试的方式之外,我不相信Rspec中有任何替代方案,这是他们提出的。 “允许”和“期望”都非常宽泛,可以掩盖你可能犯下的其他错误。 – jmkoni

相关问题