当前位置: 首页 > 知识库问答 >
问题:

如何使用Gradle运行ScalaTest和JUnit测试?

羊舌成周
2023-03-14

我有一个混合的Java/Scala项目,包含JUnit和ScalaTest测试。使用scalatest插件,Gradle在src/test/scala中运行scalatest测试,但忽略src/test/java中的JUnit测试。没有插件,Gradle运行JUnit测试,但忽略Scala。我错过了什么把戏?

我的构建。格雷德尔

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:我知道有可能对Scala测试进行注释,以迫使它们与JUnit测试运行器一起运行。我正在寻找一个一站式的build.gradle解决方案,它不需要编辑每个测试文件(或者扰乱测试来规避构建系统中的限制)。

共有3个答案

阎智
2023-03-14

使用最新版本的scala测试插件,您可以选择是否将现有(junit)-测试任务替换为scala测试任务。在您的情况下,您可以在

格拉德尔。特性:

com.github.maiflai.gradle-scalatest.mode = append

现在,您可以执行两个测试:

  • jUnit: gradle test
  • scala-test: gradle scatest

或者将它们合并到一个任务中

task allTests {
    dependsOn test
    dependsOn scalatest
}

那对我有用。

夏侯玄天
2023-03-14
  1. 去掉插件,因为它使测试任务只运行ScalaTest(所以JUnit被忽略)
晋承运
2023-03-14

使用JUnit运行的另一种选择(以及创建注释中建议的蚂蚁任务)是创建一个直接运行ScalaTest的运行程序的任务:

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
 类似资料:
  • 问题内容: 目前,我有以下 build.gradle 文件: 这 的build.gradle 文件是我的仓库 在这里 。我所有的主文件都在 src / model /中 ,它们各自的测试在 test / model中 。 如何正确添加JUnit 4 依赖项 ,然后在 测试/模型 文件夹中运行那些测试? 问题答案: 如何正确添加junit 4依赖关系? 假设您要针对标准Maven(或等效版本)存储库

  • 当前我有以下build.gradle文件: 此build.gradle文件用于我的存储库。我的所有主文件都在src/model/中,它们各自的测试都在test/model中。

  • 我正在用scala到java maven项目编写一些测试。我希望用maven插件运行这些测试,但我也希望其余的JUnit测试也能运行。问题是,根据这个指导方针,我必须禁用surefire。我有一个同时运行scalatest和junit测试的解决方案吗?

  • 我有一个Java应用程序,它使用Gradle作为构建系统。这是多项目构建(几个Java项目)。 当我运行时,有些测试失败了,我注意到并不是所有的测试都在运行。 如果我将以下代码添加到中,它确实会运行所有测试,但当然,构建的代码总是成功完成: 我有两个问题: gradle是否在第一次失败后停止执行测试? 是否有一种方法可以运行所有测试(即使在一些测试失败时),并且如果其中一些测试失败,构建的测试仍然

  • 我想为詹金斯创建一个简单的硒项目。当我用Runner.java运行测试时,输出显示0种情况。当我用mvn运行我的测试时,e.g.mvn干净的验证-Dcucumber.options="--tags@烟雾"输出显示我构建成功 我所有的类都在src/test/java/package中 Runner:src/test/java/Runner/Runner。JAVA 胶水:src/test/java/胶

  • kotlintest测试从Intellij启动时运行得非常好,但当我尝试使用gradle test task命令运行它们时,只会找到并运行我的常规JUnit测试。 kotlintest代码: build.gradle: