2017-11-25 16 views
2

약 1000 개의 테스트로 프로젝트를 상속 받았습니다. 최근까지는 gradle clean test 명령을 입력했을 때 모두 실행되었습니다.일부 테스트가 내 Gradle 빌드에서 실행되지 않는 이유는 무엇입니까?

하루가 다 끝날 때까지 일부 테스트가 테스트 통계에 포함되지 않았습니다 (통과 테스트, 실패 테스트 및 무시 된 테스트의 수, 모든 테스트 실행 종료시 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)에 누락 된 테스트 중 하나 인 com.mycompany.comm.CommApplicationTests이 있는지 찾아 보았습니다. 내가 테스트가 실행된다는 결론이에서

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 출력이다.

erorr을 수정하거나 해결하려면 어떻게해야합니까? (즉, 모든 실행 된 테스트가 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 (27.11. 2017 16:51 MSK) :이 오류는 Mac에서는 발생하지 않습니다 (Gradle은 합격, 합격 및 불합격 검사의 합계 수를보고합니다).

업데이트 3 (2017년 11월 29일 12시 48분 MSK) :

내가 자바 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

경고가 JDK에서 온다고 가정하면 오류가 있거나없는 시스템에서 사용중인 Java 버전을 말하면 더 의미가 있습니다. 또한 gradle 버전은 의미있을 수 있습니다. 그리고 마지막으로, 그라디언트 포럼은 이것에 대한 지원을받는 더 좋은 장소 일 수 있습니다. – tkruse

+0

Java 및 Gradle 버전에 대해서는 update 3을 참조하십시오. –

답변

0

테스트 코드를 보지 않고도 말하기 어렵습니다. 그러나 "결과가 전체 통계에 포함되지 않았다"고 정확하게 생각하는 이유는 무엇입니까? 나는 그 어떤 생각을 보지 못합니까? 보고 된 테스트 수가 감소 했습니까?

아니면 그냥 오류 메시지입니까? 표준 오류 출력에보고 된 "유일한"오류 메시지 인 것 같습니다. 이러한 오류가 반드시 테스트가 실패했음을 의미하는 것은 아니며, 단지 "경고"일뿐입니다. 오류 출력에 쓰기를 제외하고는 아무 것도 수행되지 않습니다.이 경우는 here과 같이 볼 수 있습니다.

그래서 내 테스트는 실제로 테스트를 통과했으며 (경고) 오류 메시지 만 출력했다고 생각합니다. Mac에서 약간 다르게 동작한다는 사실은 많은 경우에 기인합니다.

+0

"결과가"전체 통계에 포함되지 않았다고 생각합니까? ": 몇 가지 사항. 첫째, 일부 테스트 클래스가 최종 보고서에 나타나지 않습니다 (Idea에서 동일한 Gradle 작업을 실행하면 테스트 결과를 HTML로 내보낼 수 있음). 그 "실종"클래스가 존재하고 오류가 없습니다 (나는 아이디어에서 이러한 테스트를 실행할 수 있습니다). 2) Gradle 로그 파일에서 이러한 테스트 클래스는'X STARTED' 및'X PASSED' (테스트 클래스의 X- 이름)와 같은 메시지에 나타납니다. 내 보낸 보고서를 이틀 동안 비교해 보면 언젠가는 몇 가지 테스트가 있었음을 알았고 다음 테스트는 사라졌습니다. –

+0

필자는 때로는 정확한 결과가보고되기 때문에 팬텀 버그 인 것처럼 보인다고 덧붙여 야합니다. –

+0

때때로? 그게 gradle 작업 종속성의 문제가 아닌가요? 예를 들어, 일부 클래스는 컴파일되지 않지만 이미 컴파일 된 경우 실행됩니다. "시험"전에 항상 "깨끗한"것을 사용합니까? 그것을 보지 않고 말하기 란 정말로 어렵습니다. – Marwin