如何使用Gradle运行JUnit测试?

Q L*_*Liu 86 java junit4 gradle build.gradle

目前我有以下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')
}    
Run Code Online (Sandbox Code Playgroud)


的build.gradle文件是我的仓库在这里.我的所有主文件都在src/model /中,它们各自的测试都在test/model中.

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

Oli*_*rth 91

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

假设您正在解决标准的Maven(或等效的)回购:

dependencies {
    ...
    testCompile "junit:junit:4.11"  // Or whatever version
}
Run Code Online (Sandbox Code Playgroud)

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

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

sourceSets {
    ...

    test {
        java {
            srcDirs = ["test/model"]  // Note @Peter's comment below
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后调用测试:

./gradlew test
Run Code Online (Sandbox Code Playgroud)

编辑:如果您使用的是JUnit 5,则需要完成更多步骤,您应该按照本教程进行操作.

  • `srcDirs = ["test/model"]`有点精确,因为它摆脱了默认的测试源目录,而`srcDir"test/model"`添加了另一个目录.对于`main`源集也是如此. (7认同)

Div*_*iff 43

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

src/main/java
src/main/resources
src/test/java
src/test/resources
Run Code Online (Sandbox Code Playgroud)

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

  • 将Eclipse构建文件定向到与Gradle相同的目录(可以防止一些令人沮丧的错误):项目 - >属性 - > Java构建路径 - >默认输出文件夹:将"bin"替换为"build".然而......根据我的经验,这似乎有一种令人不安的习惯,即经常出乎意料地"滑回"默认的"垃圾箱".很高兴知道是否有一种方法可以让Eclipse默认使用"build". (2认同)
  • 据我所知,@ mike-rodent明确不鼓励为eclipse和gradle共享相同的构建路径(参见https://discuss.gradle.org/t/problems-with-eclipse-executing-junit-tests-编译逐gradle这个/ 2338) (2认同)

nob*_*bar 13

如果您使用Spring Initializr创建项目,则应正确配置所有内容,并且您需要执行的所有操作...

./gradlew clean test --info
Run Code Online (Sandbox Code Playgroud)
  • --info如果您不想看到测试输出,请删除.
  • clean如果您不想重新运行自上次更改后已经过的测试,请删除.

build.gradle在Spring Boot中测试所需的依赖性...

dependencies {
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,测试运行器没有告诉你这个,但它会生成一个HTML报告build/reports/tests/test/index.html.


Mah*_*zad 8

这是针对Kotlin DSL (build.gradle.kts) 并使用 JUnit 5(JUnit 平台):

tasks.test {
    // Discover and execute JUnit4-based tests
    useJUnit()

    // Discover and execute TestNG-based tests
    useTestNG()

    // Discover and execute JUnit Platform-based (JUnit 5, JUnit Jupiter) tests
    // Note that JUnit 5 has the ability to execute JUnit 4 tests as well
    useJUnitPlatform()
}

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter:5.8.2")
    // ...
}
Run Code Online (Sandbox Code Playgroud)