Unit testing RSpec:x27的替代方案是什么;允许';的任何实例;?
在Rspec模拟维护程序中 。。。出于一些原因不鼓励使用它 列出的原因似乎与此功能的Unit testing RSpec:x27的替代方案是什么;允许';的任何实例;?,unit-testing,rspec,Unit Testing,Rspec,在Rspec模拟维护程序中 。。。出于一些原因不鼓励使用它 列出的原因似乎与此功能的expect版本有关,但它们对两者没有区别 我可以理解为什么不鼓励使用expect版本,但是allow版本似乎没有列出这些问题 似乎使用allow版本是测试某些类型行为的最方便的方法 示例: 我正在测试一些路线的授权。一种方法是在DB中构造一个用户,但这似乎相当繁琐,我更喜欢创建一个模拟对象,并在authorize调用期间返回它。本例是测试使用复杂库的代码的一个特定案例,这些库是单独测试的 考虑到不鼓励使用,有什
expect
版本有关,但它们对两者没有区别
我可以理解为什么不鼓励使用expect
版本,但是allow
版本似乎没有列出这些问题
似乎使用allow
版本是测试某些类型行为的最方便的方法
示例:
我正在测试一些路线的授权。一种方法是在DB中构造一个用户,但这似乎相当繁琐,我更喜欢创建一个模拟对象,并在authorize调用期间返回它。本例是测试使用复杂库的代码的一个特定案例,这些库是单独测试的
考虑到不鼓励使用,有什么更好的替代方法吗?根据您发布的文档,不使用
允许任何实例的原因是它过于繁重,可能会掩盖您可能错过的潜在代码气味。尽管如此,我仍然使用它。。。他们肯定没有提供替代方案,因此,如果您需要该功能,并且考虑过其他选项或其他编写测试的方法,并决定不使用这些选项或方法,请使用它。我发现文档中缺少该功能,这就是我问这个问题的原因。特别是它没有区分allow
和expect
变体,也没有提出任何替代方案。我相信文档的作者正在阻止这些方法的allow
和expect
版本,尽管它们在示例中使用了expect
。他们提供了一个使用Widget
的示例,如:```因此,存在一些语义混乱的边缘情况。例如,在expect\u any\u instance\u of(Widget.).to receive(:name)。tweeps中,不清楚特定实例是否需要两次接收name,或者是否需要两次接收总计。(这是前者。)``相反,试着将协作者作为一个模拟对象传递进来,并对其做出期望,而不是任何实例。不幸的是,我不相信Rspec中有任何替代方案,除了改变你编写测试的方式,这正是他们所建议的。allow
和expect
都非常广泛,可以掩盖您可能犯的其他错误。