web-dev-qa-db-ja.com

Multidexの後でRobolectricユニットテストが失敗する

そのため、私は最近、robolectric 3.0アップグレードをメインラインとマージしました。これにより、アプリケーションにmultidexサポートが追加されました。残念ながら、これにはテストが失敗する/実行されないという残念な副作用がありました。MultiDexをインストールする最初の失敗した試行の後に、このスタックトレースを使用してテストが停止しました。

Java.lang.RuntimeException: Java.lang.RuntimeException: Multi dex installation failed (/Users/me/Data/Projects/my-Android/myapp/. (Is a directory)).
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:257)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:222)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.Java:194)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:300)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.Java:86)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.Java:49)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.Java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.Java:48)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.Java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.Java:24)
at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.Java:32)
at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.Java:93)
at com.Sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.Java:105)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:606)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.Java:35)
at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.Java:24)
at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.Java:355)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.Java:64)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1145)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:615)
at Java.lang.Thread.run(Thread.Java:744)

Multidex.InstallでRuntimeExceptionをキャッチするなどのさまざまなソリューションを実装しようとしました(ここに記載されているように https://github.com/robolectric/robolectric/issues/1328 )提供されているシャドウMultiDexを使用していますRobolectricによるが、それは単にGradle TaskExecutionExceptionで失敗し、値255で終了する。

誰かがこれを修正する方法をまだ考え出しましたか?それは私のワークフローを本当に遅くしています。

42
hendersawn

Multi-dexシャドウ依存関係を追加するだけです。

testImplementation "org.robolectric:shadows-multidex:4.0.1"

Robolectric <3.4を使用している場合は、代わりに次を使用します。

testImplementation "org.robolectric:multidex:3.4.2"
130
DoronK