Specs2 在处理验收规范(如果我们想要的话甚至是单元规范)时提升了函数式风格。
规范Specs2 哲学中提到了使用旧样式(可变样式)的风险,并涉及潜在的不良副作用:
需要了解的重要事项是:
副作用仅用于构建规范片段,通过改变变量它们还用于在出现故障时(通过抛出异常)短路示例的执行。如果您在示例主体中构建片段或同时执行相同的规范,那么天应该塌下来。“上下文”管理将通过案例类或特征完成(参见 org.specs2.examples.MutableSpec)
我不知道如何同时运行相同的规范,因为每个规范都与另一个不同(分离的类的实例),即使我们同时运行相同的两次或更多次。
确实,specFragments
(可变变量):
protected[mutable] var specFragments: Fragments = new Fragments()
a trait
在被调用中声明FragmentBuilder
,而不是在object
(在scala意义上=>单例)或其他共享事物中......,每个实例specFragments
的局部变量也是如此。Specification
那么什么情况下可能会冒并发机制的风险呢?
我并没有真正想出一个真实的场景(非愚蠢)来证明 Specs2 功能风格的好处。