I've got a mixed Java / Scala project with both JUnit and ScalaTest tests. With the scalatest plugin, Gradle runs the ScalaTest tests in src/test/scala
, but ignores the JUnit tests in src/test/java
. Without the plugin, Gradle runs the JUnit tests but ignores the Scala. What trick am I missing?
My build.gradle
:
plugins {
id 'java'
id 'maven'
id 'scala'
id "com.github.maiflai.scalatest" version "0.6-5-g9065d91"
}
sourceCompatibility = 1.8
group = 'org.chrononaut'
version = '1.0-SNAPSHOT'
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
ext {
scalaMajorVersion = '2.11'
scalaVersion = "${scalaMajorVersion}.5"
}
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile "org.scala-lang:scala-library:${scalaVersion}"
compile "org.scala-lang.modules:scala-xml_${scalaMajorVersion}:1.0.3"
compile 'com.google.guava:guava:18.0'
compile 'javax.xml.bind:jaxb-api:2.2.12'
compile 'jaxen:jaxen:1.1.6'
compile 'joda-time:joda-time:2.7'
compile 'org.joda:joda-convert:1.7'
compile 'org.apache.commons:commons-lang3:3.3.2'
compile 'org.jdom:jdom2:2.0.5'
testCompile 'junit:junit:4.12'
testCompile 'org.easytesting:fest-assert:1.4'
testCompile 'org.mockito:mockito-core:1.10.19'
testCompile "org.scalatest:scalatest_${scalaMajorVersion}:2.2.4"
testRuntime 'org.pegdown:pegdown:1.1.0' // required by scalatest plugin
}
compileScala {
scalaCompileOptions.additionalParameters = [
"-feature",
"-language:reflectiveCalls", // used for config structural typing
"-language:postfixOps"
]
}
ETA: I know it's possible to annotate Scala tests to force them to run with the JUnit test runner. I'm looking for a one-stop build.gradle
solution that doesn't require editing every test file (or messing with the tests to get around limitations in the build system, in general).
We can run our unit tests by using the command: gradle clean test.
Another alternative to running with JUnit (and to creating an Ant task as suggested in comments) - is creating a task that runs ScalaTest's Runner directly:
task scalaTest(dependsOn: ['testClasses'], type: JavaExec) {
main = 'org.scalatest.tools.Runner'
args = ['-R', 'build/classes/test', '-o']
classpath = sourceSets.test.runtimeClasspath
}
test.dependsOn scalaTest // so that running "test" would run this first, then the JUnit tests
@RunWith(classOf[JUnitRunner])
so they can be run by gradle as JUnit tests.With the latest version of scala-test plugin you can choose whether the existing (junit)-test task is replaced or not by the scala-tests-task. In your case you could use the following in
gradle.properties:
com.github.maiflai.gradle-scalatest.mode = append
Now you can execute both tests:
or combine them into one task
task allTests {
dependsOn test
dependsOn scalatest
}
That worked for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With