It is not necessary to use a build tool to run a specification. You just need to have the right dependencies on the classpath and use one of the
When you use a build tool you generally only need to specify the main dependencies then any transitive dependency will be fetched for you. However, when you run specifications from the shell you need to specify the classpath yourself. The best way to do this is to use sbt
to make sure your specification compiles with all the required dependencies, then export the project classpath:
sbt> export Runtime / fullClasspath
sbt> export Test / fullClasspath
With the output of both commands you can define an environment variable, $SPECS2_PATH
sh> export $SPECS2_PATH=<runtime classpath>:<test classpath>
The specs2.run
object can be used to run a specification from the shell. The first argument is expected to be the class name
sh> java -cp $SPECS2_PATH specs2.run org.acme.MySpec xonly
And the other arguments are used to drive the execution of the specification as described in the Arguments section.
The specs2.files
object will select and execute all specifications found in the test source directory according to the following parameters:
Name | Default value | Description |
---|---|---|
filesrunner.basepath |
src/test/scala |
source directory for test files |
filesrunner.path |
**/*.scala |
glob pattern for the file paths |
filesrunner.pattern |
(.*Spec)\s*extends\s*.* |
regular expression capturing the specification class/object name |
filesrunner.verbose |
false |
logs of searched paths and potential classes to instantiate |
Specification arguments can be passed after those parameters
sh> java -cp $SPECS2_PATH specs2.files filesrunner.basepath examples xonly
Tip! use the filesrunner.verbose
argument to make sure that you are looking for specifications in the right place
Tip! don’t forget to quote the filesrunner.path
argument, since this is a glob and your shell might expand it too soon
sh> java -cp $SPECS2_PATH specs2.files filesrunner.path '**/examples/*Spec.scala'
By default the specs2.run
and specs2.files
runners will output their results to the console but you can also use other printers as described in the Runners section.
The specs2.run
object also has an apply
method to execute specifications from the Scala console
scala> specs2.run(spec1, spec2)
If you want to pass specific arguments you can import the specs2.arguments
object member functions
scala> import specs2.arguments.*
scala> specs2.run(spec1)(nocolor)
Or you can set implicit arguments which will be used for any specification execution
scala> import specs2.arguments.*
scala> given Arguments = nocolor
scala> specs2.run(spec1)
.