我有以下设置:
Apache Maven 3.8.1
Maven home: /Users/deyb/.sdkman/candidates/maven/current
Java version: 1.8.0_342, vendor: Azul Systems, Inc., runtime: /Users/myuser/.sdkman/candidates/java/8.0.342-zulu/zulu-8.jdk/Contents/Home/jre
Default locale: en_PH, platform encoding: US-ASCII
OS name: "mac os x", version: "12.3", arch: "aarch64", family: "mac"
jdk 和 maven 安装程序通过在 mac m1 中运行的 sdkman 安装。
在构建项目时,我得到了一个成功的 Maven 构建,显示所有测试均已通过且没有失败。 尽管显示失败的测试结果,但通过 ide 对预期失败的类之一触发单元测试,我无法弄清楚为什么它的行为不同。我期待它失败;但是 maven 构建仍然会导致构建成功
提供更多背景信息: 例如我有一个测试类:
com.sample.MySampleTest
单元测试片段
import junit.runner.Version;
...
Set<ConstraintViolation<MySample>> violations = validator.validate(dto);
log.info("violations count >>> {}", violations.size());
log.info("JUnit version is: " + Version.id());
assertThat(violations, hasSize(1));
Maven 构建的日志:
08:04:22.880 [main] INFO c.s.MySampleTest - violations count >>> 1
08:04:22.880 [main] INFO c.s.MySampleTest - JUnit version is: 4.12
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 sec
来自 IDE 的日志导致测试失败:
08:05:03.431 [main] INFO c.s.MySampleTest - violations count >>> 0
08:05:03.431 [main] INFO c.s.MySampleTest - JUnit version is: 4.12
java.lang.AssertionError:
Expected: a collection with size <1>
but: collection size was <0>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
at org.junit.Assert.assertThat(Assert.java:956)
at org.junit.Assert.assertThat(Assert.java:923)
我尝试了以下并得到了这些行为:
export PATH="$PATH:/Applications/IntelliJ IDEA CE.app/Contents/plugins/maven/lib/maven3/bin"
;也做了chmod
以获得正确的许可,但结果是一样的run all tests
通过 com.sample
包中的 intelliJ 显示 MySampleTest 中的测试失败(这是正确的行为)run all tests
通过在 com
包上执行的 intellj 显示 MySampleTest 中的测试失败(这是正确的行为)run all tests
通过在模块级别执行的 intellj 在 MySampleTest 中显示失败的测试(这是正确的行为).m2
存储库中删除了 junit 目录以重新下载并做了 mvn clean install
也导致成功构建mvn clean install
构建失败的结果指出失败的测试Assert.assertEquals(true, false);
并通过 Maven 结果运行它到失败的构建(这是预期的,但只报告了简单的测试,而不是来自 MySampleTest
的测试)junit.runner.Version.id()
测试以确保匹配版本)鉴于这些行为,是否有任何其他方法可以确定是什么导致通过 maven cli 进行包/安装成功,即使测试失败并且没有被跳过?
就程序而言,不,它几乎是反复试验。但是,这里还有一些可以尝试的东西,其中一些可能与您的特定测试相关,也可能不相关: