【问题标题】:Gradle tests fail locally, but succeed on CI serversGradle 测试在本地失败,但在 CI 服务器上成功
【发布时间】:2019-06-22 12:16:38
【问题描述】:

我有一个使用 JUnit 单元测试设置的 Gradle Java 项目。有一些测试应该会失败。他们在我的机器上这样做,但它在 CI 服务器上成功且没有错误。

第一个自然假设是 CI 服务器配置一定有问题。但是,在无法让它在 CodeShip 上失败后,我用 Travis 进行了尝试,得到了相同的结果。在 CodeShip 中,奇怪的是日志告诉我它根本没有找到任何测试(所以当然没有失败的测试)。

测试文件在 git repo 上(不可忽略),所有脚本,无论是 Gradle 还是 CI 服务器配置,都非常简单。所以我目前不知道这里有什么问题。例如,这是 .travis.yml:

language: java
jdk:
  - oraclejdk8

这是build.gradle

plugins {
    id 'java'
}

group 'net.roughdesign.ajiwa'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'
}

test {
    useJUnitPlatform()
}

什么可能导致这种行为?

【问题讨论】:

  • 你确定测试真的是在 CI 上执行的吗?也许他们因为某种原因被跳过了。为什么你确定他们必须在 CI 上失败?您是否尝试过将和assertTrue(false) 放入测试中以确保它们确实失败了?可能您的测试或应用程序逻辑取决于时区或区域设置,因此只会在您的机器上失败,而不会在云中的 CI 上失败。
  • @britter 是的,一切都很好,我的错误是混淆了版本;我写了一个解释它的答案。尽管如此,还是感谢您的努力。

标签: java gradle junit continuous-integration


【解决方案1】:

错误在于混淆了 JUnit 版本。

JUnit 4

// in the Gradle file
testCompile group: 'junit', name: 'junit', version: '4.12'

// in Java code
import org.junit.Test;

JUnit 5

// in the Gradle file
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1'

// in Java code
import org.junit.jupiter.api.Test;

发生了什么

  • 我导入了两个版本
  • 我在 JUnit 4 中编写了测试(使用 import org.junit.Test;
  • CI 服务器默认使用 JUnit 5

所以确实没有 JUnit 5 测试。

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 2023-03-22
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多