【问题标题】:How to play with Specs matchers in Scala REPL?如何在 Scala REPL 中使用 Specs 匹配器?
【发布时间】:2010-01-16 22:16:20
【问题描述】:

在调试或探索规范特性时,将它们键入 REPL(Scala 解释器)而不是使用规范的文件中并使用 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

【问题讨论】:

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


    【解决方案1】:

    您可以使用 scala -classpath 启动 Scala 控制台,并为您在规范中使用的规范和其他库(例如 JUnit、Scalacheck)提供必要的 jar。或者,您可以使用 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 控制台,运行 &gt; ~test

    【讨论】:

    • sbt 非常棒,因为您使用 Specs 依赖项设置它,然后运行 ​​console 命令,以及 ~test 命令。 (有时摆弄正是您所需要的。)
    • 附带说明:您还可以在 Scala REPL 运行时将 JAR 文件加载到类路径中:“:jar /path/to/jarfile.jar”
    【解决方案2】:

    我不了解 Specs,但我使用 ScalaCheck 这样做过,它真正需要的只是在类路径中包含其 JAR。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2015-02-08
      • 2013-05-26
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      相关资源
      最近更新 更多