如何使用 Gradle 运行 JUnit 测试?

Posted

技术标签:

【中文标题】如何使用 Gradle 运行 JUnit 测试?【英文标题】:How to run JUnit tests with Gradle? 【发布时间】: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 的文件夹中运行这些测试?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何使用 Gradle 运行 JUnit 测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Gradle中使用JUnit 5?

如何通过 Gradle 测试任务在我的 JUnit 上启用调试

如何在多模块项目中使用 JUnit5 和 SpringBoot2 通过 gradle 而不是 intelliJ 运行测试

如何将 JUnit 5 与 Gradle 一起使用?

如何在Gradle中为单个测试类并行执行JUnit测试

如何使用命令行在 Gradle 上运行空手道测试