2015-02-18 28 views
15

Mam mieszany projekt Java/Scala z testami JUnit i ScalaTest. Z scalatest plugin, Gradle uruchamia testy ScalaTest w src/test/scala, ale ignoruje testy JUnit w src/test/java. Bez wtyczki Gradle uruchamia testy JUnit, ale ignoruje Scalę. Jakiej sztuczki mi brakuje?Jak uruchomić oba testy ScalaTest i JUnit z Gradle?

My 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: wiem, że to możliwe opisywanie Scala testuje zmusić je do pracy z prowadnicą testu JUnit. Szukam rozwiązania typu one-stop build.gradle, które nie wymaga edycji każdego pliku testowego (lub mieszania się z testami w celu obejścia ograniczeń w systemie kompilacji, ogólnie).

+0

Co się dzieje, jeśli usunąć com.github. maiflai.scalatest i co to naprawia? – judoole

+0

Jeśli usuniemy com.github.maiflai.scalatest, testy Scala nie zostaną uruchomione, tylko te JUnit (zobacz oryginalny post). –

+0

Może, jeśli rzucisz się na to, aby ScalaTests działał z Gradle: @RunWith (classOf [org.scalatest.junit.JUnitRunner]) – judoole

Odpowiedz

8
  1. Pozbądź się wtyczki, ponieważ powoduje, że zadanie testowe uruchamia tylko ScalaTest (więc JUnit zostanie zignorowany).
  2. Opisuj swoje ScalaTests za pomocą @RunWith(classOf[JUnitRunner]), aby można je było prowadzić przez gradle jako testy JUnit.
+0

Jestem świadomy tej opcji (i zostało to również zasugerowane w komentarzach), ale nie wydaje mi się, żebym musiał edytować każdy plik testowy, aby to działało. –

+2

Następnie należy rozszerzyć kompilację i dodać nowe zadanie (np. 'Test scalaTest.mustRunAfter') i zastosować zadanie Ant pod maską. Coś jak https://issues.gradle.org/browse/GRADLE-2659. W ten sposób 'gradle check' uruchomi zarówno testy JUnit, jak i ScalaTests. – Piohen

10

Inną alternatywą działa z JUnit (i do tworzenia Ant zadanie jako sugerowane w komentarzach) - tworzy zadanie uruchamiające ScalaTest za Runner bezpośrednio:

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 
Powiązane problemy