0

適切なケース:

java.lang.ExceptionInInitializerError
    at sun.misc.Unsafe.ensureClassInitialized(Native Method)
    at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
    at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:142)
    at java.lang.reflect.Field.acquireFieldAccessor(Field.java:1088)
    at java.lang.reflect.Field.getFieldAccessor(Field.java:1069)
    at java.lang.reflect.Field.get(Field.java:393)
    at utest.runner.BaseRunner.runUTestTask(BaseRunner.scala:30)
    at utest.runner.BaseRunner$$anonfun$utest$runner$BaseRunner$$makeTask$1.apply(BaseRunner.scala:95)
    at utest.runner.BaseRunner$$anonfun$utest$runner$BaseRunner$$makeTask$1.apply(BaseRunner.scala:95)
    at utest.runner.Task.executeInternal(Task.scala:48)
    at utest.runner.Task.execute(Task.scala:19)
    at sbt.TestRunner.runTest$1(TestFramework.scala:76)
    at sbt.TestRunner.run(TestFramework.scala:85)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:202)
    at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:185)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:202)
    at sbt.TestFunction.apply(TestFramework.scala:207)

その例外にぶつかるソースの場所は次のとおりです。行のコピーは次のとおりです。

val suite = TestUtils.loadModule(name, testClassLoader).asInstanceOf[TestSuite]

明日、この特定のケースを追跡するために utest をデバッグします。これは、私の utest 対応プロジェクトの 1 つだけで発生するため、エッジ ケースである必要があります (おそらく、ディレクトリ パスとパッケージ アラインメントに関連しています)。

しかし、コードが への呼び出しの前にエラー状態をキャッチできるように、この種のリフレクション エラーを回避する防御的なプログラミングの良い形を提案できますasInstanceOfか、または代わりに、catch ブロックの慣用的なコード - 強制失敗の理由を伝えます。より実用的な方法で?

4

0 に答える 0