如何在Scala REPL中使用Specs匹配器?

时间:2010-01-16 22:16:20

标签: scala read-eval-print-loop specs

在调试或探索规范功能时,更有利的是在REPL(Scala解释器)中键入它们,而不是在带有spec的文件中,并使用类似maven的方式运行它。在REPL中创建与Specification对象相同的“环境”的最佳方法是什么?

更新 看起来在REPL中试验规范匹配器的最简单方法是定义一些辅助子类并在其体内使用表达式:

scala> class S extends Specification { override def toString = { reportSpecs; "" } }
defined class S

scala> new S { 1 mustEqual 2 }
Specification "anon"

  x example 1
    '1' is not equal to '2' (<console>:10)

Total for specification "anon":
Finished in 0 second, 4 ms
1 example, 1 expectation, 1 failure, 0 error

2 个答案:

答案 0 :(得分:4)

您可以使用scala -classpath启动Scala控制台,并为规范中使用的规范和其他库提供必要的jar(例如JUnit,Scalacheck)。或者,您可以使用SBT的控制台功能以正确的类路径启动控制台。

进入控制台后,您可以定义规范并执行它,如下所示。

Welcome to Scala version 2.8.0.Beta1-RC5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_15).
Type in expressions to have them evaluated.
Type :help for more information.

scala> object Foo extends org.specs.Specification {
     |    "1 + 1" in { (1 + 1) must_== 2 }         
     | }                                           
defined module Foo

scala> Foo.reportSpecs
Specification "Foo"

  + 1 + 1

Total for specification "Foo":
Finished in 0 second, 184 ms
1 example, 1 expectation, 0 failure, 0 error

res0: Foo.type = Foo

您可能还想在SBT中尝试连续测试运行器,它会在每次保存.scala文件后自动重新编译并运行测试。从SBT控制台,运行> ~test

答案 1 :(得分:0)

我不知道Specs,但我已经使用ScalaCheck完成了,而且它真正需要的是在类路径中使用它的JAR。