2015-02-18 8 views
15

Ich habe ein gemischtes Java/Scala Projekt mit JUnit und ScalaTest Tests. Mit der scalatest plugin führt Gradle die ScalaTest-Tests in src/test/scala aus, ignoriert jedoch die JUnit-Tests in src/test/java. Ohne das Plugin führt Gradle die JUnit-Tests aus, ignoriert aber die Scala. Welchen Trick vermisse ich?Wie leite ich ScalaTest und JUnit Tests mit Gradle?

Mein 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: Ich weiß, es ist möglich, Scala zu annotieren testet sie zu zwingen, mit dem JUnit-Testläufer zu laufen. Ich suche nach einer Lösung build.gradle aus einer Hand, die nicht erfordert, jede Testdatei zu bearbeiten (oder mit den Tests zu verwirren, um Einschränkungen im Build-System im Allgemeinen zu umgehen).

+0

Was ist, wenn Sie com.github entfernen passiert. maiflai.scalatest und was repariert es? – judoole

+0

Wenn ich com.github.maiflai.scalatest entferne, dann werden die Scala-Tests nicht ausgeführt, sondern nur die JUnit-Tests (siehe Originalbeitrag). –

+0

Vielleicht, wenn Sie darauf schlagen, um ScalaTests mit Gradle laufen zu lassen: @RunWith (classOf [org.scalatest.junit.JUnitRunner]) – judoole

Antwort

8
  1. Entfernen Sie das Plugin, da es die Testaufgabe nur zum Ausführen von ScalaTest (also JUnit wird ignoriert) macht.
  2. Beschriften Sie Ihre ScalaTests mit @RunWith(classOf[JUnitRunner]), damit sie von Google Junt als Test ausgeführt werden können.
+0

Ich kenne diese Option (und es wurde auch in Kommentaren vorgeschlagen), aber ich denke nicht, dass ich jede Testdatei bearbeiten müsste, um das zu erreichen. –

+2

Dann sollten Sie Ihren Build erweitern und eine neue Aufgabe hinzufügen (z. B. "scalaTest.mustRunAfter test") und die Ant-Task unter der Haube einsetzen. Etwas wie https://issues.gradle.org/browse/GRADLE-2659. Auf diese Weise führt 'grddle check' sowohl JUnit-Tests als auch ScalaTests aus. – Piohen

10

Eine weitere Alternative mit JUnit zu laufen (und wie in den Kommentaren schlug eine Ant-Task zu erstellen) - eine Task erstellt, die direkt ScalaTest Runner läuft:

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