我继承了一个包含大约 1000 个测试的项目。直到最近,当我输入gradle clean test
命令时,它们都被执行了。
从一天到另一天,一些测试不再包含在测试统计中(Gradle 和 Idea 在所有测试执行结束时输出的通过、失败和忽略的测试的数量)。代码仍然存在,测试没有被忽略。也没有修改任何构建脚本。当我在 IntelliJ Idea 中运行测试时,它们会被执行(即没有编译器错误可以解释为什么测试不运行)。
我相信测试已执行,但由于以下原因,它们的结果未包含在总体统计数据中。我执行了命令 gradle --debug --rerun-tasks clean test > 2017_11_24_gradle.log
。然后我在生成的 2017_11_24_gradle.log
文件 (grep "com.mycompany.comm. CommApplicationTests”2017_11_24_gradle.log)。
这是 grep 的输出:
17:00:54.861 [QUIET] [system.out] 17:00:54.860 [DEBUG] [org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor] Executing test class com.mycompany.comm.CommApplicationTests
17:00:54.867 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests STARTED
17:00:55.169 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests > validateProtocol STARTED
17:00:55.875 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests > validateProtocol STANDARD_OUT
17:00:57.272 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests > validateProtocol PASSED
17:00:57.273 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests > contextLoads STARTED
17:00:57.273 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests > contextLoads PASSED
17:00:57.274 [DEBUG] [TestEventLogger] com.mycompany.comm.CommApplicationTests PASSED
由此我得出结论,测试已执行。
唯一可能会或可能不会导致未包含某些测试结果的可疑之处是:
16:37:47.251 [ERROR] [system.err] *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
16:37:47.343 [ERROR] [system.err] *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
16:37:47.343 [ERROR] [system.err] *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
16:37:47.346 [ERROR] [system.err] *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
16:37:47.346 [ERROR] [system.err] *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
16:37:47.347 [ERROR] [system.err] *** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message transform method call failed at JPLISAgent.c line: 844
这些消息在gradle --debug --rerun-tasks clean test
执行期间输出到System.err
。
我如何修复或解决错误(即确保所有执行的测试都反射(reflect)在 Gradle 最后打印的最终统计数据(通过、失败和忽略的测试的数量)中)?
更新 1(2017 年 11 月 27 日 10:49 MSK):
看起来错误发生在 code fragment 中下面(注释 //Line 844
):
if ( !errorOutstanding ) {
jplis_assert(agent->mInstrumentationImpl != NULL);
jplis_assert(agent->mTransform != NULL);
transformedBufferObject = (*jnienv)->CallObjectMethod(
jnienv,
agent->mInstrumentationImpl,
agent->mTransform,
loaderObject,
classNameStringObject,
classBeingRedefined,
protectionDomain,
classFileBufferObject,
is_retransformer);
errorOutstanding = checkForAndClearThrowable(jnienv);
jplis_assert_msg(!errorOutstanding, "transform method call failed"); // Line 844
}
更新 2(2017 年 11 月 27 日 16:51 MSK):此错误不会发生在 Mac 上(Gradle 报告正确的总数、通过和失败的测试)。
更新 3(2017 年 11 月 29 日 12:48 MSK):
我使用的是 Java 1.8.0_152 和 Gradle 2.14。由于客户要求,我无法升级Gradle版本。
java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
gradle -version
------------------------------------------------------------
Gradle 2.14
------------------------------------------------------------
Build time: 2016-06-14 07:16:37 UTC
Revision: cba5fea19f1e0c6a00cc904828a6ec4e11739abc
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_152 (Oracle Corporation 25.152-b16)
OS: Windows 10 10.0 amd64
最佳答案
不看测试代码很难判断。然而,究竟是什么原因让你认为“结果未纳入总体统计”呢?我没有看到任何概念?报告的测试数量是否减少了?
还是只是错误信息?这些似乎是报告给标准错误输出的“唯一”错误消息。这样的错误并不一定意味着测试失败,它们只是“警告”——从某种意义上说,除了将它们写入错误输出之外什么也没做,例如可以看到 here .
因此,我的印象是测试确实通过了,它们只是打印了一条(警告)错误消息。它们在 Mac 上的行为略有不同,这可能是由多种情况造成的。
关于java - 为什么有些测试没有在我的 Gradle 构建中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47486638/