无法使用Gradle运行Scalatest

Jos*_* MN 22 scala gradle scalatest

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')
    }
}
Run Code Online (Sandbox Code Playgroud)

我跑了gradle scalaTest,我得到:

* What went wrong:
Execution failed for task ':scalaTest'.
> java.lang.NoClassDefFoundError: scala/reflect/ClassManifest$
Run Code Online (Sandbox Code Playgroud)

我正在使用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'
}
Run Code Online (Sandbox Code Playgroud)

怎么了??

rar*_*rry 31

我不知道如何解决这个,但我可以为你提供一个解决方法.使用如下注释来测试您的测试类@RunWith(classOf[JUnitRunner]):

import org.scalatest.junit.JUnitRunner
import org.junit.runner.RunWith

@RunWith(classOf[JUnitRunner])
class MyTest extends FunSpec{
}
Run Code Online (Sandbox Code Playgroud)

然后,gradle test应该工作.

编辑:

我的依赖:

compile "org.scala-lang:scala-library:2.10.1"
testCompile "org.scalatest:scalatest_2.10:1.9.1"
Run Code Online (Sandbox Code Playgroud)

  • 我认为最新的依赖应该是testCompile而不是compile. (8认同)

Mac*_*uji 18

您可以将以下内容放入build.gradle:

task spec(dependsOn: ['testClasses'], type: JavaExec) {
  main = 'org.scalatest.tools.Runner'
  args = ['-R', 'build/classes/test', '-o']
  classpath = sourceSets.test.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)

然后运行gradle spec以执行测试.我将任务命名为spec因为已经有test任务.Dunno,如果你可以覆盖默认的测试任务.

您可以在此处查找可用选项.

  • 在Gradle 4中,您需要将`'build/classes/test'`更改为`'build/classes/scala/test'`. (7认同)
  • 您可以添加"test.dependsOn spec"行来运行带有`gradle test`的scala测试 (3认同)

小智 5

这个回复可能有点晚了。但是对于将 Scala 与 gradle (5.x) 一起使用的人来说,以下是有效的。

将以下插件添加到 gradle。

plugins {
  id "com.github.maiflai.scalatest" version "0.25"
}
Run Code Online (Sandbox Code Playgroud)

运行代码

> gradle test
Run Code Online (Sandbox Code Playgroud)

作为奖励,上述测试结果的plugin报告也将比默认报告更好。