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)
.