RSpec允许用户跨测试/示例进行共享上下文,这将大大减少应用程序中的代码行数。
另一方面,与测试之间共享代码库的问题有关,我之所以使用工厂而不是工装,原因之一是我不希望测试依赖于存储在测试之外的代码。赖安·贝茨更好地解释了这一点:
测试和夹具之间存在很大的依赖关系,我们可以通过更改夹具来导致测试失败。这种强大的外部依赖不是一个好主意,它会使测试变得脆弱。
这里的最佳实践是在测试之间共享上下文,还是为每个测试创建一个独立的上下文?
发布于 2013-05-12 10:02:54
工厂本身被认为是无状态的,因为从调用者的角度来看,工厂每次都做相同的事情。因此,从逻辑上讲,共享工厂的唯一方法是,如果您以某种方式违反了该合同,返回的实例在某种程度上受到了以前对工厂的调用的影响。
换句话说,工厂可以并且通常执行创建实例的优化,但是调用方完全不会受到这种情况的影响。因此,在简单的情况下,一个工厂只是创建一个实例并返回它,它不会给您带来问题,您必须通过共享工厂来解决这些问题。
然而,虽然一个工厂可以通过共享实例来优化这一点,但是可以理解的是,共享的对象(或表面上)是无状态的。如果他们不是,如果你是幸运的,你会立即看到这些错误,尽管如果你不是幸运的话,那么你在你的程序中会收到一系列的错误,直到很多个月后它们才会出现。这是一个反模式,如果我可以补充的话,一个特别令人讨厌的。
所以,如果你想使用一个工厂,只需确保它符合模式。如果您没有处理无状态对象,就不要采取任何快捷方式,在调用工厂来创建实例时实例化每个对象,这样就可以了。
https://softwareengineering.stackexchange.com/questions/197804
复制相似问题