21

Vì vậy, gần đây tôi đã hợp nhất bản nâng cấp robolectric 3.0 với đường chính của chúng tôi, đã bổ sung hỗ trợ đa điểm cho ứng dụng của chúng tôi. Thật không may, điều này có tác dụng phụ không may gây thử nghiệm của chúng tôi thất bại/không chạy - họ sẽ chỉ đơn giản dừng lại sau thất bại đầu tiên để cài đặt MultiDex, với đống này dấu vết:Kiểm tra đơn vị Robolectric không thành công sau khi 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) 

tôi cố gắng thực hiện các giải pháp khác nhau , chẳng hạn như bắt RuntimeException trong Multidex.Install của tôi (như được ghi chú ở đây https://github.com/robolectric/robolectric/issues/1328) và sử dụng bóng MultiDex do Robolectric cung cấp, nhưng đơn giản là không thành công với Gradle TaskExecutionException và thoát với giá trị 255.

Có ai đã tìm ra cách để khắc phục điều này chưa? Nó thực sự làm chậm công việc của tôi xuống.

+0

Tôi không mong đợi cài đặt multidex được thực hiện kể từ khi thử nghiệm đang chạy trên JVM. Nhưng ai biết được –

+2

Bản sao có thể xảy ra của http://stackoverflow.com/questions/26512170/usage-of-multidexapplication-causes-robolectric-test-for-the-application-class-t/33609900#33609900 –

Trả lời

77

Chỉ cần thêm sự phụ thuộc bóng multidex:

testCompile "org.robolectric:shadows-multidex:3.0" 
+4

điều này phải được đánh dấu là một câu trả lời đúng – shtas

+1

Điều đó có hiệu quả đối với tôi. – oceanfeeling

+9

Đảm bảo rằng phiên bản được nêu trong dòng này giống với phiên bản trong testCompile 'org.robolectric: robolectric: 3.0', nếu không nó sẽ không hoạt động – user2924714

Các vấn đề liên quan