我有一个混合的Java / Scala项目,包括JUnit和ScalaTest测试。使用scalatest plugin,Gradle在src/test/scala
中运行ScalaTest测试,但忽略src/test/java
中的JUnit测试。没有插件,Gradle运行JUnit测试但忽略Scala。我错过了什么伎俩?
我的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:我知道可以注释Scala测试以强制它们与JUnit测试运行器一起运行。我正在寻找一站式build.gradle
解决方案,该解决方案不需要编辑每个测试文件(或者通常会弄乱测试以绕过构建系统中的限制)。
答案 0 :(得分:10)
使用JUnit运行的另一种替代方法(以及根据注释中的建议创建Ant任务) - 正在创建一个直接运行ScalaTest的Runner的任务:
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
答案 1 :(得分:9)
@RunWith(classOf[JUnitRunner])
注释ScalaTests,以便在JUnit测试时可以通过gradle运行它们。答案 2 :(得分:2)
如果您不想使用@RunWith(classOf[JUnitPlatformRunner])
注释所有ScalaTest测试,但想使用JUnit 5,则可以在Gradle中使用scalatest-junit-runner。
由于它已集成到JUnitPlatform系统中,因此您可以简单地使用test
任务,ScalaTest将与其他测试引擎执行的其他测试一起运行:
plugins {
id 'scala'
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.scala-lang:scala-library:$scala_version"
testImplementation "org.scalatest:scalatest_$scala_lib_version:3.2.0-M3"
testRuntime "org.junit.platform:junit-platform-engine:$junit_platform_version"
testRuntime "org.junit.platform:junit-platform-launcher:$junit_platform_version"
testRuntime "co.helmethair:scalatest-junit-runner:0.1.2"
}
test{
useJUnitPlatform {
includeEngines 'scalatest'
}
}
答案 3 :(得分:1)
使用最新版本的scala-test插件,您可以选择是否用scala-tests-task替换现有的(junit)-test任务。您可以在
中使用以下内容gradle.properties:
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.css",
"src/styles.css"
],
现在您可以执行两个测试:
或将它们组合成一项任务
com.github.maiflai.gradle-scalatest.mode = append
对我有用。