2017-11-25 39 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)に、不足しているテストの1つ、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 

これはgrepのの出力です。またはいくつかのテスト結果の非含めることを考慮しない場合があり

のみ不審な事はこれです:

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):

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:

エラーがcode fragment// Line 844コメント)以下で発生するように見えます。 2017 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 
+0

あなたの警告がJDKに由来しているため、エラーのある/なしのシステムで使用しているJavaのバージョンを指定する方が意味があります。また、グラデルバージョンは意味があるかもしれません。そして最後に、これについての援助を得るために、グランドルフォーラムがより良い場所かもしれません。 – tkruse

+0

JavaとGradleのバージョンについては、update 3を参照してください。 –

答えて

0

テストコードを見ずには分かりません。しかし、「結果は全体的な統計には含まれていない」と正確には考えていますか?私はそれについて何の考えも見ませんか?報告されたテスト数は減少しましたか?

それはエラーメッセージですか?これらは標準エラー出力に報告される "唯一の"エラーメッセージのようです。このようなエラーは、必ずしもテストが失敗したことを意味するわけではなく、単に「警告」であるという意味で、エラー出力に書き込む以外は何も行われません。これは、例えばhereです。

私の印象は、実際にテストが合格したばかりで、(警告)エラーメッセージが表示されただけです。 Macでの動作が若干異なるという事実は、多くの状況によって発生する可能性があります。

+0

Re:「結果が全体の統計に含まれていないと思うのはなぜですか?」:いくつかのことがあります。まず、いくつかのテストクラスが最終レポートに表示されません(アイデアで同じGradleタスクを実行すると、テスト結果をHTMLにエクスポートできます)。これらの「欠落した」クラスは存在し、エラーもありません(アイデアでこれらのテストを実行できます)。 2)Gradleログファイルでは、これらのテストクラスは 'X STARTED'と' X PASSED'(テストクラスのX名)のようなメッセージで表示されます。私が2日間に輸出された報告書を比較すると、ある試験がそこにあったことがわかり、次の試験は消えました。 –

+0

私は時々正しい結果が報告されているので、これはファントムバグと思われると付け加えなければなりません。 –

+0

時には?それはgradleタスクの依存関係の問題ではありませんか?たとえば、コンパイルされないクラスもあれば、コンパイルされたときに実行されるクラスもあります。あなたは常に "テスト"の前に "クリーン"を使用しますか? それを見ずに言うのは本当に難しいです。 – Marwin

関連する問題