約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
あなたの警告がJDKに由来しているため、エラーのある/なしのシステムで使用しているJavaのバージョンを指定する方が意味があります。また、グラデルバージョンは意味があるかもしれません。そして最後に、これについての援助を得るために、グランドルフォーラムがより良い場所かもしれません。 – tkruse
JavaとGradleのバージョンについては、update 3を参照してください。 –