【问题标题】:How to run JUnit tests with Gradle?如何使用 Gradle 运行 JUnit 测试?
【发布时间】:2014-01-09 12:23:15
【问题描述】:

目前我有以下 build.gradle 文件:

apply plugin: 'java'

sourceSets {
    main {
        java {
            srcDir 'src/model'
        }
    }
}

dependencies {
    compile files('libs/mnist-tools.jar', 'libs/gson-2.2.4.jar')
    runtime fileTree(dir: 'libs', include: '*.jar')
}    


这个 build.gradle 文件用于我的存储库 here。我所有的主要文件都在 src/model/ 中,它们各自的测试都在 test/model 中。

如何正确添加 JUnit 4 依赖,然后在 tests/model 的文件夹中运行这些测试?

【问题讨论】:

    标签: java gradle junit4 build.gradle


    【解决方案1】:

    如何正确添加 junit 4 依赖项?

    假设您正在解决标准 Maven(或等效)存储库:

    dependencies {
        ...
        testCompile "junit:junit:4.11"  // Or whatever version
    }
    

    在测试/模型文件夹中运行这些测试?

    您以相同的方式定义测试源集:

    sourceSets {
        ...
    
        test {
            java {
                srcDirs = ["test/model"]  // Note @Peter's comment below
            }
        }
    }
    

    然后调用测试:

    ./gradlew test
    

    编辑:如果您使用的是 JUnit 5,则需要完成更多步骤,您应该遵循 this tutorial

    【讨论】:

    • srcDirs = ["test/model"] 更精确一点,因为它摆脱了默认的测试源目录,而srcDir "test/model" 添加了另一个目录。 main 源集也是如此。
    【解决方案2】:

    如果您使用默认的 gradle 包结构设置项目,即:

    src/main/java
    src/main/resources
    src/test/java
    src/test/resources
    

    那么您将无需修改 sourceSets 来运行您的测试。 Gradle 会发现你的测试类和资源在 src/test.然后,您可以按照 Oliver 上面所说的方式运行。需要注意的一件事:设置属性文件和使用 gradle 和 IDE 运行测试类时要小心。我使用 Eclipse,从它运行 JUnit 时,Eclipse 选择一个类路径(bin 目录),而 gradle 选择另一个(构建目录)。如果您编辑资源文件并且在测试运行时看不到您的更改,这可能会导致混乱。

    【讨论】:

    • 将 Eclipse 构建文件定向到与 Gradle 相同的目录(可以防止一些令人沮丧的错误):项目 --> 属性 --> Java 构建路径 --> 默认输出文件夹:替换“bin”与“构建”。然而......根据我的经验,这似乎有一个令人不安的习惯,即每隔一段时间就会意外地“滑回”默认的“bin”。很高兴知道是否有办法让 Eclipse 默认使用“构建”。
    • @mike-rodent 据我所知,明确不鼓励为 eclipse 和 gradle 共享相同的构建路径(参见例如discuss.gradle.org/t/…
    • 好的,我的立场是正确的! ...我想编译到同一个目录没有任何好处。在大多数情况下,eclipse builder 功能只是一个验证工具:“哎呀,这不会因为 x、y 和 z 而编译”。
    • @DivDiff 我的 src 文件夹结构的设置方式与上述相同,但是当我进行 gradle 测试时,它什么也没做。它根本不运行我的测试。有什么想法吗?
    • @Gaurav,我邀请你去聊天室,这样我们就可以离线讨论了。
    【解决方案3】:

    如果您使用Spring Initializr 创建项目,则应正确配置一切,您需要做的就是运行...

    ./gradlew clean test --info
    
    • 如果您想查看测试输出,请使用 --info
    • 如果您想重新运行自上次更改后已经通过的测试,请使用 clean

    build.gradle 中所需的依赖项,用于在 Spring Boot 中进行测试...

    dependencies {
        compile('org.springframework.boot:spring-boot-starter')
        testCompile('org.springframework.boot:spring-boot-starter-test')
    }
    

    由于某种原因,测试运行程序没有告诉您这一点,但它会在 build/reports/tests/test/index.html 中生成 HTML 报告。

    【讨论】:

      【解决方案4】:

      testCompile 已弃用。 Gradle 7 兼容:

      dependencies {
      ...
         testImplementation 'junit:junit:4.13'
      }
      

      如果您使用默认文件夹结构 (src/test/java/...),测试部分很简单:

      test {
          useJUnit()
      }
      

      最后:

      gradlew clean test
      

      另见:https://docs.gradle.org/current/userguide/java_testing.html

      【讨论】:

        【解决方案5】:

        如果你想在所有现有的之外添加一个用于测试的源集,在一个模块中,无论活动风格如何:

        sourceSets {
            test {
                java.srcDirs += [
                        'src/customDir/test/kotlin'
                ]
                print(java.srcDirs)   // Clean
            }
        }
        

        注意运算符+=,如果你想运行集成测试,请将test更改为androidTest

        GL

        【讨论】:

          猜你喜欢
          • 2017-03-28
          • 1970-01-01
          • 2018-08-19
          • 2020-03-09
          • 2016-03-13
          • 2018-07-20
          • 1970-01-01
          • 2017-01-15
          • 1970-01-01
          相关资源
          最近更新 更多