我继承了一个包含大约1000个测试的项目。直到最近,当我输入gradle clean test
命令时,所有这些都已被执行。
从一天到另一天,一些测试停止被包含在测试统计中(Gradle和Idea在执行所有测试时输出的传递,失败和忽略测试的数量)。代码仍在那里,测试不会被忽略。也没有修改任何构建脚本。当我在IntelliJ Idea中运行测试时,它们会被执行(即没有编译器错误可以解释为什么测试不会运行)。
我认为测试已执行,但由于以下原因,它们的结果未包含在整体统计数据中。我执行了命令gradle --debug --rerun-tasks clean test > 2017_11_24_gradle.log
。然后,我在生成的com.mycompany.comm.CommApplicationTests
文件(grep" com.mycompany.comm.CommApplicationTests" 2017_11_24_gradle.log)中查找了一个缺少的测试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
在执行System.err
期间,这些消息将输出到gradle --debug --rerun-tasks clean test
。
如何修复或解决erorr(即确保所有执行的测试都反映在Gradle最后打印的结束统计数据(已通过,失败和忽略的测试数))?
更新1(27.11.2017 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(27.11.2017 16:51 MSK):在Mac上不会发生此错误(Gradle报告正确的总数,通过数和失败数)。
更新3(29.11.2017 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
答案 0 :(得分:0)
没有看到测试代码就很难分辨。但是,究竟是什么让你认为"结果不包含在整体统计数据中?#34;?我没有看到任何这个概念?报告的测试次数是否减少了?
或者只是错误消息?这些似乎只是"只有"报告给标准错误输出的错误消息。这些错误并不一定意味着测试失败,它们只是警告" - 从某种意义上说,除了将它们写入错误输出之外没有任何操作,例如可以看到here。
所以,我的印象是测试确实通过了,他们只是打印了一条(警告)错误信息。他们在Mac上表现略有不同的事实可能是由许多情况造成的。