task scalaTest(dependsOn: testClasses) << {
description = 'Runs Scalatest suite'
ant.taskdef(name: 'scalatest',
classname: 'org.scalatest.tools.ScalaTestAntTask',
classpath: sourceSets.test.runtimeClasspath.asPath
)
ant.scalatest(runpath: sourceSets.test.output.classesDir,
haltonfailure: 'true', fork: 'false') {
reporter(type: 'stdout')
}
}
我运行gradle scalaTest
并得到:
* What went wrong:
Execution failed for task ':scalaTest'.
> java.lang.NoClassDefFoundError: scala/reflect/ClassManifest$
我正在使用Scala 2.10.2和Gradle 1.7
dependencies {
compile 'org.scala-lang:scala-library:2.10.2'
testCompile 'org.scalatest:scalatest:1.3'
testCompile 'org.scalamock:scalamock_2.10:3.0.1'
}
怎么了?
答案 0 :(得分:31)
我不知道如何解决这个问题,但我可以为您提供解决方法。使用@RunWith(classOf[JUnitRunner])
注释您的测试类,如下所示:
import org.scalatest.junit.JUnitRunner
import org.junit.runner.RunWith
@RunWith(classOf[JUnitRunner])
class MyTest extends FunSpec{
}
然后,gradle test
应该有用。
修改强>
我的依赖项:
compile "org.scala-lang:scala-library:2.10.1"
testCompile "org.scalatest:scalatest_2.10:1.9.1"
答案 1 :(得分:18)
您可以将以下内容放入build.gradle
:
task spec(dependsOn: ['testClasses'], type: JavaExec) {
main = 'org.scalatest.tools.Runner'
args = ['-R', 'build/classes/test', '-o']
classpath = sourceSets.test.runtimeClasspath
}
然后只需运行gradle spec
即可执行测试。
我将任务命名为spec
,因为已经有test
个任务。 Dunno,如果你可以覆盖默认的测试任务。
您可以查找可用选项here。
答案 2 :(得分:3)
从Gradle 3.2.1开始,以下根build.gradle
运行JUnit和ScalaTest代码。此代码用于通过settings.gradle
启用的多项目构建,这是subprojects
使用的原因。
此外,它有意使用显式Gradle API,以最大限度地减少Gradle DSL魔力。
description = 'root project'
def enableScalaTest(Project project) {
Task scalaTest = project.task(
[
'dependsOn': 'testClasses',
'description': 'Runs ScalaTest tests in the project'
],
'scalaTest',
{
ext.inputDir = project.tasks.getByName('compileTestScala').destinationDir
inputs.dir(ext.inputDir)
}
)
scalaTest.doLast({
ant.taskdef(name: 'scalatest',
classname: 'org.scalatest.tools.ScalaTestAntTask',
classpath: project.sourceSets.test.runtimeClasspath.asPath)
ant.scalatest(runpath: ext.inputDir,
fork: 'false',
haltonfailure: 'true')
{ reporter(type: 'stdout') }
})
project.getTasks().getByName('build').dependsOn(scalaTest)
}
subprojects {
apply plugin: 'scala'
repositories {
mavenCentral()
}
dependencies {
compile 'org.scala-lang:scala-library:2.12.1'
testCompile 'junit:junit:4.12'
testCompile 'org.scalatest:scalatest_2.12:3.0.1'
}
enableScalaTest(delegate)
}
答案 3 :(得分:2)
@RunWith(classOf[JUnitRunner])
一次来注释基础测试类,以使所有ScalaTest测试与JUnit运行器一起运行(假设它们扩展了基类),例如:
import org.junit.runner.RunWith
import org.scalatest._
import org.scalatest.junit.JUnitRunner
@RunWith(classOf[JUnitRunner])
abstract class UnitSpec extends FlatSpec with Matchers
答案 4 :(得分:0)
此响应可能有点晚。但是对于将scala与gradle(5.x)一起使用的人,以下工作有效。
将以下插件添加到gradle中。
plugins {
id "com.github.maiflai.scalatest" version "0.25"
}
运行代码
> gradle test
此外,上述plugin
的测试结果也比默认报告要好。