【发布时间】:2021-04-16 17:52:45
【问题描述】:
我正在尝试在 GitHub Actions 上运行 JUnit 测试,但其中一些失败。本地所有测试都通过了。在我的 PC 上,我使用 Ubuntu 20.04 和 OpenJDK 1.8 (275),在 CI 上使用 OpenJDK 1.8(来自标准操作)。
java -version 从 PC 输出:
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~20.04-b01)
OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)
java-version 来自 GitHub Actions 的输出:
openjdk version "1.8.0_275"
OpenJDK Runtime Environment (Zulu 8.50.0.53-CA-linux64) (build 1.8.0_275-b01)
OpenJDK 64-Bit Server VM (Zulu 8.50.0.53-CA-linux64) (build 25.275-b01, mixed mode)
测试断言:
@Test
public void test() {
assertEquals(
17,
new CountingSheep(
new Boolean[]{
true, true, true, false,
true, true, true, true,
true, false, true, false,
true, false, false, true,
true, true, true, true,
false, false, true, true
}
).solution()
);
}
代码:
package com.smlnskgmail.jaman.codewarsjava.kyu8;
import java.util.Arrays;
public class CountingSheep {
private final Boolean[] input;
public CountingSheep(Boolean[] input) {
this.input = input;
}
public int solution() {
return (int) Arrays
.stream(input, 0, input.length)
.filter(b -> b != null && b)
.count();
}
}
CI 检查失败:
com.smlnskgmail.jaman.codewarsjava.kyu8.CountingSheepTest > test FAILED
java.lang.AssertionError: expected:<17> but was:<0>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:834)
at org.junit.Assert.assertEquals(Assert.java:645)
at org.junit.Assert.assertEquals(Assert.java:631)
at com.smlnskgmail.jaman.codewarsjava.kyu8.CountingSheepTest.test(CountingSheepTest.java:11)
JUnit 实现:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
GitHub 操作配置:
name: Build
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
env:
GRADLE_OPTS: -Dorg.gradle.daemon=false
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Gradle
run: ./gradlew build --info
但是这个测试在一个月前通过了,我无法更改代码。
代码库:https://github.com/fartem/codewars-java
解决方案:here 是具有项目反射的类。如果不执行这个类,所有测试都会通过。
【问题讨论】:
-
您是否单步执行了 IDE 中的代码?
CountingSheep构造函数在哪里? -
自上次测试通过以来,Gradle 版本是否发生了变化?或者可能是 Java 1.8 的版本 检查 Ubuntu 的
actions/virtual-environments存储库以查看更改日志。 -
与一个月前的版本相同(当所有测试都通过时)。在问题中,我添加了来自 PC 和 GitHub Actions 的
java -version输出。 -
顺便说一句,那些投反对票的人可以给个理由吗?问题远非微不足道,发帖人已经展示了自己的努力,到目前为止,他已经提供了他所要求的一切。
-
值得下载 Azul Zulu 版本,以便您使用完全相同的版本运行,或者在执行相同操作的 Docker 容器中本地运行它。代码看起来应该在两个地方都相同,但显然结果代码的计数返回零。可能值得放入一些打印语句,以便您可以验证您的代码是否按预期被调用。
标签: java junit jvm github-actions