Как играть со спичками Specs в Scala REPL?
При отладке или изучении спецификационных функций было бы более выгодно вводить их в REPL (интерпретатор Scala), а не в файл со спецификацией и запускать его с чем-то вроде maven. Каков оптимальный способ создать в REPL ту же "среду", что и в объекте спецификации?
Обновление: похоже, что самый простой способ поэкспериментировать с сопоставлениями спецификаций в 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 ответа
Вы можете запустить консоль Scala с помощью scala -classpath
и предоставьте необходимые 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
Я не знаю о спецификациях, но я сделал это с ScalaCheck, и все, что ему действительно нужно, это иметь JAR в пути к классам.