2017-11-25 256 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中的一個。

這是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

我該如何解決或解決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):

我使用Java 1.8.0_152和搖籃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版本可能是有意義的。最後,Gradle論壇可能是獲得這方面支持的更好的地方。 – tkruse

+0

關於Java和Gradle版本,請參閱更新3。 –

回答

0

很難說,沒有看到測試代碼。但是,究竟是什麼讓你認爲「結果未包含在整體統計數據中」呢?我沒有看到這個概念?報告的測試次數是否減少?

或者它只是錯誤消息?這些似乎是「僅」報告給標準錯誤輸出的錯誤消息。這樣的錯誤並不一定意味着測試失敗,它們只是「警告」 - 從某種意義上說,除了將它們寫入錯誤輸出之外沒有任何事情可做,例如可以看到here

所以,我的印象是,測試確實通過了,他們只是打印(警告)錯誤消息。他們在Mac上表現稍有不同的事實可能是由許多情況引起的。

+0

Re「究竟是什麼讓您認爲」結果未包含在整體統計數據中?「:幾件事情。首先,一些測試類不會出現在最終報告中(如果我在Idea中執行相同的Gradle任務,我可以將測試結果導出爲HTML)。那些「缺失」類確實存在並且沒有錯誤(我可以在Idea中執行這些測試)。 2)在Gradle日誌文件中,這些測試類出現在諸如'X STARTED'和'X PASSED'(測試類的X-name)之類的消息中。當我比較兩天之間的出口報告時,我發現一些測試在某一天出現,並在下一次測試中消失。 –

+0

我必須補充一點,這似乎是一個幻影錯誤,因爲有時會報告正確的結果。 –

+0

有時候?這不是一些問題的gradle任務依賴關係?例如,某些類可能無法編譯,但在編譯時會執行。你在「測試」之前總是使用「乾淨」嗎? 沒有看到這一點真的很難說。 – Marwin

相關問題