scala gradle scalatest

No se puede ejecutar Scalatest con Gradle



(4)

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 y obtengo:

* What went wrong: Execution failed for task '':scalaTest''. > java.lang.NoClassDefFoundError: scala/reflect/ClassManifest$

Estoy usando Scala 2.10.2 y 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'' }

Que pasa ??


A partir de Gradle 3.2.1, la siguiente raíz build.gradle ejecuta los build.gradle JUnit y ScalaTest. Este código es para la compilación de varios proyectos, habilitado a través de settings.gradle , por eso se utilizan los subprojects .
Además, a propósito utiliza Gradle API explícito, para minimizar la magia DSL de Gradle.

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) }


No sé cómo resolver esto, pero puedo ofrecerle una solución. Anota tus clases de prueba con @RunWith(classOf[JUnitRunner]) , así:

import org.scalatest.junit.JUnitRunner import org.junit.runner.RunWith @RunWith(classOf[JUnitRunner]) class MyTest extends FunSpec{ }

y luego, la gradle test debería funcionar.

Editar:

Mis dependencias:

compile "org.scala-lang:scala-library:2.10.1" testCompile "org.scalatest:scalatest_2.10:1.9.1"


Puedes poner lo siguiente en tu build.gradle :

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

Luego simplemente ejecuta gradle spec para ejecutar tus pruebas. Nombré la spec la tarea porque ya hay una tarea de test . No sé si puede anular la tarea de prueba predeterminada.

Puedes consultar las opciones disponibles here .


rarry es correcto Y aún mejor, puede anotar una clase de prueba base con @RunWith(classOf[JUnitRunner]) una vez para hacer que todas sus pruebas de ScalaTest se ejecuten con el corredor JUnit (asumiendo que extiendan la clase base), por ejemplo:

import org.junit.runner.RunWith import org.scalatest._ import org.scalatest.junit.JUnitRunner @RunWith(classOf[JUnitRunner]) abstract class UnitSpec extends FlatSpec with Matchers