为什么我的Gradle构建中没有执行某些测试?

时间:2017-11-25 13:44:27

标签: java testing gradle automated-tests jvm-crash

我继承了一个包含大约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

1 个答案:

答案 0 :(得分:0)

没有看到测试代码就很难分辨。但是,究竟是什么让你认为"结果不包含在整体统计数据中?#34;?我没有看到任何这个概念?报告的测试次数是否减少了?

或者只是错误消息?这些似乎只是"只有"报告给标准错误输出的错误消息。这些错误并不一定意味着测试失败,它们只是警告" - 从某种意义上说,除了将它们写入错误输出之外没有任何操作,例如可以看到here

所以,我的印象是测试确实通过了,他们只是打印了一条(警告)错误信息。他们在Mac上表现略有不同的事实可能是由许多情况造成的。

相关问题