Unit tests – run JUnit tests using SBT
I have a 0.13 7 SBT project has several subprojects
One of them is called webapp, which has many JUnit tests in webapp / SRC / test / Java
Runtime:
sbt webapp/test
Only scalatest tests run, but no JUnit tests
My build Snippet of SBT file:
libraryDependencies ++= Seq( "com.novocode" % "junit-interface" % "0.11" % Test ) lazy val webapp = project settings( Seq( projectDependencies ++= Seq( .... "org.scalatest" %% "scalatest" % "2.2.2" % Test,"junit" % "junit" % "4.11" % Test,"com.novocode" % "junit-interface" % "0.11" % Test ) ): _* )
Example JUnit test:
import org.junit.Test; public class CodificadorBase64Test { @Test public void testPlain() { byte b[] = {64,127,72,36,100,1,5,9,123}; assertEquals("QH9IJGQBBQl7",CodificadorBase64.encode(b)); } }
Update (some more research):
> webapp/testFrameworks [info] List(TestFramework(WrappedArray(org.scalacheck.ScalaCheckFramework)),TestFramework(WrappedArray(org.specs2.runner.Specs2Framework,org.specs2.runner.SpecsFramework)),TestFramework(WrappedArray(org.specs.runner.SpecsFramework)),TestFramework(WrappedArray(org.scalatest.tools.Framework,org.scalatest.tools.ScalaTestFramework)),TestFramework(WrappedArray(com.novocode.junit.JUnitFramework)) show webapp/loadedTestFrameworks [info] Map(TestFramework(WrappedArray( org.scalatest.tools.Framework,org.scalatest.tools.ScalaTestFramework) ) -> org.scalatest.tools.Framework@65767aeb)
So JUnit support is known to SBT, but it is not loaded
Commissioning output:
[debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present. [debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present. [debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present. [debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present. [debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present. [debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present. [debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present. [debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present. [debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs.runner.SpecsFramework' not present. [debug] Framework implementation 'org.specs.runner.SpecsFramework' not present. [debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present. [debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present. [debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present. [debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present. [debug] Subclass fingerprints: List((org.scalatest.Suite,false,org.scalatest.tools.Framework$$anon$1@3ad42aff)) [debug] Subclass fingerprints: List((org.scalatest.Suite,org.scalatest.tools.Framework$$anon$1@97f54b)) [debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@6a589982)) [debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@1b95d5e6)) [debug] Subclass fingerprints: List((org.scalatest.Suite,org.scalatest.tools.Framework$$anon$1@5c997dac)) [debug] Subclass fingerprints: List((org.scalatest.Suite,org.scalatest.tools.Framework$$anon$1@406c43ef)) [debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@282ddefc)) [debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@4400c80))
usage method:
> SBT 0.13. 9, and > JUnit 4 x.
Relevant information:
> Why don’t junit tests get executed with “sbt test”? > SBT documentation
Solution
Finally, I found that I had to add the following settings to the subproject:
lazy val webapp = project settings( Seq( projectDependencies ++= Seq( .... "org.scalatest" %% "scalatest" % "2.2.2" % Test,crossPaths := false,"com.novocode" % "junit-interface" % "0.11" % Test ) ): _* )
It is important to declare the JUnit interface dependency in the subproject and set crosspaths to false
The clue has been provided by this issue
If the main project does not conduct JUnit testing, you do not need to provide the required test settings
In addition, in order to know the method and cause of failure, we need this setting:
testOptions in Test := Seq(Tests.Argument(TestFrameworks.JUnit,"-a"))