it-swarm.com.ru

Gradle + Robolectric: куда мне поместить файл org.robolectric.Config.properties?

Я пытаюсь настроить тест с использованием Robolectric, чтобы нажать на кнопку меню в это хранилище . Будут выполняться базовые тесты Robolectric, но я не могу выполнить какой-либо специфичный для проекта тест с использованием ресурсов, потому что он говорит, что не может найти мой AndroidManifest.xml. После запуска ../gradlew clean check вот стандартный вывод из файла Robolectric html:

WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. To remove this warning, annotate your test class with @Config(manifest=Config.NONE).

Я нашел эти инструкции , которые указывают, что я должен создать файл org.robolectric.Config.properties, но я не уверен, куда его поместить Я пробовал везде, в значительной степени, и, несмотря на перемещение файла, путь в сообщении об ошибке всегда такой же, как указано выше (./AndroidManifest.xml). Это заставляет меня думать, что процесс сборки никогда не подбирал настройки в файле org.robolectric.Config.properties.

Я также попробовал директиву @Config (manifest = ""), но это дало мне ошибку cannot find symbol. Если я переместил AndroidManifest.xml в каталог моего проекта, то получаю сообщение об ошибке, так как он не может найти путь ./res/values, и я также не могу его решить. Есть идеи?

Обновление 1

Спасибо, Евгений, теперь я использую @RunWith(RobolectricGradleTestRunner.class) вместо @RunWith(RobolectricTestRunner).

Теперь я получаю другую ошибку, все еще происходящую в той же строке мой BasicTest.Java

KeywordList keywordList = Robolectric.buildActivity(KeywordList.class).create().get();

Ниже приведены результаты стандартной ошибки, стандартного вывода и вкладки "Неудачные тесты" в отчете о тестировании Robolectric:

Примечание: я также попытался заменить jar, созданный на основе последних обновлений Robolectric, robolectric-2.2-SNAPSHOT.jar, но все равно получил ошибку.

Стандартная ошибка

WARNING: no system properties value for ro.build.date.utc

Стандартный вывод

DEBUG: Loading resources for net.frontlinesms.Android from ~/workspace-studio/frontlinesms-for-Android/FrontlineSMS/build/res/all/debug...
DEBUG: Loading resources for Android from jar:~/.m2/repository/org/robolectric/Android-res/4.1.2_r1_rc/Android-res-4.1.2_r1_rc-real.jar!/res...
INFO: no id mapping found for Android:drawable/scrollbar_handle_horizontal; assigning ID #0x1140002
INFO: no id mapping found for Android:drawable/scrollbar_handle_vertical; assigning ID #0x1140003
INFO: no id mapping found for Android:color/highlighted_text_dark; assigning ID #0x1140004
INFO: no id mapping found for Android:color/hint_foreground_dark; assigning ID #0x1140005
INFO: no id mapping found for Android:color/link_text_dark; assigning ID #0x1140006
INFO: no id mapping found for Android:color/dim_foreground_dark_disabled; assigning ID #0x1140007
INFO: no id mapping found for Android:color/dim_foreground_dark; assigning ID #0x1140008
INFO: no id mapping found for Android:color/dim_foreground_dark_inverse_disabled; assigning ID #0x1140009
INFO: no id mapping found for Android:color/dim_foreground_dark_inverse; assigning ID #0x114000a
INFO: no id mapping found for Android:color/bright_foreground_dark_inverse; assigning ID #0x114000b
INFO: no id mapping found for Android:layout/text_edit_paste_window; assigning ID #0x114000c
INFO: no id mapping found for Android:layout/text_edit_no_paste_window; assigning ID #0x114000d
INFO: no id mapping found for Android:layout/text_edit_side_paste_window; assigning ID #0x114000e
INFO: no id mapping found for Android:layout/text_edit_side_no_paste_window; assigning ID #0x114000f
INFO: no id mapping found for Android:layout/text_edit_suggestion_item; assigning ID #0x1140010

Неудачные тесты

Android.view.InflateException: XML file ~/workspace-studio/frontlinesms-for-Android/FrontlineSMS/build/res/all/debug/layout/rule_list.xml line #-1 (sorry, not yet implemented): Error inflating class net.frontlinesms.Android.ui.view.ActionBar
at Android.view.LayoutInflater.createView(LayoutInflater.Java:613)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:687)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
at org.robolectric.tester.Android.view.RoboWindow.setContentView(RoboWindow.Java:82)
at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.Java:272)
at Android.app.Activity.setContentView(Activity.Java)
at net.frontlinesms.Android.activity.KeywordList.onCreate(KeywordList.Java:70)
at Android.app.Activity.performCreate(Activity.Java:5008)
at org.fest.reflect.method.Invoker.invoke(Invoker.Java:112)
at org.robolectric.util.ActivityController$1.run(ActivityController.Java:119)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.Java:256)
at org.robolectric.util.ActivityController.create(ActivityController.Java:114)
at org.robolectric.util.ActivityController.create(ActivityController.Java:126)
at net.frontlinesms.Android.BasicTest.setUp(BasicTest.Java:30)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:24)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:241)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.Java:177)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.Java:80)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.Java:47)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.Java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.Java:49)
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:103)
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:66)
at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:895)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:918)
at Java.lang.Thread.run(Thread.Java:680)
Caused by: Java.lang.reflect.InvocationTargetException
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createView(LayoutInflater.Java:587)
at Android.view.LayoutInflater.createView(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createViewFromTag(LayoutInflater.Java:687)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:396)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:352)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at org.robolectric.tester.Android.view.RoboWindow.setContentView(RoboWindow.Java:82)
at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.Java:272)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.robolectric.bytecode.ShadowWrangler$ShadowMethodPlan.run(ShadowWrangler.Java:455)
at Android.app.Activity.setContentView(Activity.Java)
at net.frontlinesms.Android.activity.KeywordList.onCreate(KeywordList.Java:70)
at Android.app.Activity.$$robo$$Activity_c57b_performCreate(Activity.Java:5008)
at Android.app.Activity.performCreate(Activity.Java)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.fest.reflect.method.Invoker.invoke(Invoker.Java:112)
at org.robolectric.util.ActivityController$1.run(ActivityController.Java:119)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.Java:256)
at org.robolectric.util.ActivityController.create(ActivityController.Java:114)
at org.robolectric.util.ActivityController.create(ActivityController.Java:126)
at net.frontlinesms.Android.BasicTest.setUp(BasicTest.Java:30)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:24)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:241)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.Java:177)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.Java:80)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.Java:47)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.Java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.Java:49)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
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:103)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
... 7 more
Caused by: Android.view.InflateException: XML file ~/workspace-studio/frontlinesms-for-Android/FrontlineSMS/build/res/all/debug/layout/actionbar.xml line #-1 (sorry, not yet implemented): Error inflating class Android.widget.ProgressBar
at Android.view.LayoutInflater.createView(LayoutInflater.Java:613)
at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.Java:38)
at Android.view.LayoutInflater.onCreateView(LayoutInflater.Java:660)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:685)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:749)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
at net.frontlinesms.Android.ui.view.ActionBar.<init>(ActionBar.Java:65)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:587)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:687)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
at org.robolectric.tester.Android.view.RoboWindow.setContentView(RoboWindow.Java:82)
at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.Java:272)
at Android.app.Activity.setContentView(Activity.Java)
at net.frontlinesms.Android.activity.KeywordList.onCreate(KeywordList.Java:70)
at Android.app.Activity.performCreate(Activity.Java:5008)
at org.fest.reflect.method.Invoker.invoke(Invoker.Java:112)
at org.robolectric.util.ActivityController$1.run(ActivityController.Java:119)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.Java:256)
at org.robolectric.util.ActivityController.create(ActivityController.Java:114)
at org.robolectric.util.ActivityController.create(ActivityController.Java:126)
at net.frontlinesms.Android.BasicTest.setUp(BasicTest.Java:30)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:24)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:241)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.Java:177)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.Java:80)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.Java:47)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.Java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.Java:49)
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:103)
... 7 more
Caused by: Java.lang.reflect.InvocationTargetException
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createView(LayoutInflater.Java:587)
at Android.view.LayoutInflater.createView(LayoutInflater.Java)
at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.Java:38)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_onCreateView(LayoutInflater.Java:660)
at Android.view.LayoutInflater.onCreateView(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createViewFromTag(LayoutInflater.Java:685)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.Java:749)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:396)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at net.frontlinesms.Android.ui.view.ActionBar.<init>(ActionBar.Java:65)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:39)
at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:27)
at Java.lang.reflect.Constructor.newInstance(Constructor.Java:513)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createView(LayoutInflater.Java:587)
at Android.view.LayoutInflater.createView(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_createViewFromTag(LayoutInflater.Java:687)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:396)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at Android.view.LayoutInflater.$$robo$$LayoutInflater_1d1f_inflate(LayoutInflater.Java:352)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java)
at org.robolectric.tester.Android.view.RoboWindow.setContentView(RoboWindow.Java:82)
at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.Java:272)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.robolectric.bytecode.ShadowWrangler$ShadowMethodPlan.run(ShadowWrangler.Java:455)
at Android.app.Activity.setContentView(Activity.Java)
at net.frontlinesms.Android.activity.KeywordList.onCreate(KeywordList.Java:70)
at Android.app.Activity.$$robo$$Activity_c57b_performCreate(Activity.Java:5008)
at Android.app.Activity.performCreate(Activity.Java)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.fest.reflect.method.Invoker.invoke(Invoker.Java:112)
at org.robolectric.util.ActivityController$1.run(ActivityController.Java:119)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.Java:256)
at org.robolectric.util.ActivityController.create(ActivityController.Java:114)
at org.robolectric.util.ActivityController.create(ActivityController.Java:126)
at net.frontlinesms.Android.BasicTest.setUp(BasicTest.Java:30)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.Java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.Java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.Java:44)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.Java:24)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.Java:241)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.Java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.Java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.Java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.Java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.Java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.Java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.Java:229)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.Java:177)
at org.junit.runners.ParentRunner.run(ParentRunner.Java:309)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.Java:80)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.Java:47)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.Java:69)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.Java:49)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
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:103)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
... 7 more
Caused by: Java.lang.ClassCastException: org.robolectric.res.AttrData cannot be cast to org.robolectric.res.StyleData
at org.robolectric.shadows.ShadowAssetManager$StyleResolver.getParent(ShadowAssetManager.Java:353)
at org.robolectric.shadows.ShadowAssetManager$StyleResolver.getAttrValue(ShadowAssetManager.Java:336)
at org.robolectric.shadows.ShadowResources.findAttributeValue(ShadowResources.Java:259)
at org.robolectric.shadows.ShadowResources.attrsToTypedArray(ShadowResources.Java:188)
at org.robolectric.shadows.ShadowResources.access$000(ShadowResources.Java:51)
at org.robolectric.shadows.ShadowResources$ShadowTheme.obtainStyledAttributes(ShadowResources.Java:460)
at Android.content.res.Resources$Theme.obtainStyledAttributes(Resources.Java)
at Android.content.Context.obtainStyledAttributes(Context.Java:374)
at Android.view.View.__constructor__(View.Java:3297)
at org.fest.reflect.method.Invoker.invoke(Invoker.Java:112)
at org.robolectric.shadows.ShadowView.__constructor__(ShadowView.Java:68)
at Android.view.View.<init>(View.Java:3295)
at Android.widget.ProgressBar.<init>(ProgressBar.Java:253)
at Android.widget.ProgressBar.<init>(ProgressBar.Java:246)
at Android.widget.ProgressBar.<init>(ProgressBar.Java:242)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:587)
at org.robolectric.shadows.RoboLayoutInflater.onCreateView(RoboLayoutInflater.Java:38)
at Android.view.LayoutInflater.onCreateView(LayoutInflater.Java:660)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:685)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:749)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
at net.frontlinesms.Android.ui.view.ActionBar.<init>(ActionBar.Java:65)
at Android.view.LayoutInflater.createView(LayoutInflater.Java:587)
at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:687)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:489)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:396)
at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
at org.robolectric.tester.Android.view.RoboWindow.setContentView(RoboWindow.Java:82)
[truncated, hit stack overflow character limit...]
21
Rob Hawkins

Я наконец нашел правильное место, чтобы поставить его. Во-первых, структура моего приложения показана ниже:

мое заявление под

app/src/main/

мое тестовое приложение находится под

app/src/test/

Вы должны назвать файл свойств как robolectric.properties и поместить его в

src/test/resources/ 

Содержимое robolectric.properties является

manifest: src/main/AndroidManifest.xml

Затем тестовая программа может наконец найти файл свойств!

7
pptang

Путь src/test/resources, как упомянуто в блоге Robolectric, похоже, работает для файла org.robolectric.Config.properties с подключаемым тестом и Robolectric SNAPSHOTS. RobolectricGradleTestRunner больше не требуется.

3
Saad Farooq

Лучший способ - переопределить getConfigProperties () в подклассе RobolectricTestRunner, поместив файл свойств в папку и указав путь следующим образом:

@Override
    protected Properties getConfigProperties() {
        FsFile fs = Fs.currentDirectory();
        InputStream resourceAsStream = null;
        try {
            File f = new File(fs.getPath() + <location-to-file-from-root-dir> + <file-name>);
            resourceAsStream = new FileInputStream(f);
        } catch (Exception e) {
            resourceAsStream = null;
        }
        if (resourceAsStream == null) return null;
        Properties properties = new Properties();
        try {
            properties.load(resourceAsStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return properties;
    }
1
Nishant Soni

Мне посчастливилось поместить org.robolectric.Config.properties в src/test/res, но не src/test/resources.

1
Emil O

Я использую плагин robolectric gradle , и я столкнулся (или все еще сталкиваюсь с;) серьезными проблемами с тестированием Junit в AS.

Однако однажды я только что узнал, где находится org.robolectric.Config.properties. Я тоже перепробовал много мест в исходном проекте, но AS начал собирать его только после того, как поместил его в build/test-classes.

Вы можете взглянуть на мой скрипт сборки gradle по адресу: Отладка модульных тестов на основе gradle с IntelliJ/AndroidStudio

Другие шаги, необходимые для запуска модульных тестов в AS:

  1. Измените порядок <orderEntry type="jdk" ... /> в конец списка в вашем файле <app>.iml (это необходимо для исключения исключений Stub !! , см .: https: //github.com/robolectric/deckard-gradle ) - этот шаг необходимо повторять каждый раз при синхронизации с gradle.

  2. Добавьте папку скомпилированных тестовых файлов в ваш файл <app>.iml. Добавить <output-test url="file://$MODULE_DIR$/build/test-classes" /> сразу после <output url=... /> (см .: Android Studio + Robolectric + класс Gradle, исключение не найдено )

  3. Скомпилируйте ваше приложение с помощью gradle: gradlew app:clean app:testDebug или что-то в этом роде. Я заметил, что AS компилирует только исходные файлы, но почему-то не компилирует тестовые классы, по крайней мере, нигде в папке /build. Gradle, с другой стороны, правильно компилирует ваши тестовые классы в /build/test-classes и с настройкой на шаге 2) AS также подберет их после компиляции. Конечно, этот шаг нужно повторять каждый раз, когда вы изменяете свои тестовые классы. (Примечание: я также нашел другое решение от Eugen, см .: https://stackoverflow.com/a/24140796/1406325 - я еще не пробовал это, но кажется, что это не так потребуется дополнительный шаг для компиляции с gradle)

  4. Поместите свой org.robolectric.Config.properties в /build/test-classes (так как с шагом 2), AS подберет его сейчас.

  5. Если у вас также есть ссылки на другие библиотеки, вам может понадобиться файл project.properties (то есть, если вы сталкиваетесь с проблемами Resources$NotFoundException при запуске ваших тестов). Опять же, куда поместить этот файл? Это входит в <app>/src/main (См .: https://groups.google.com/forum/#!topic/robolectric/gjpwqRICT5 )

     Android.library.reference.1 = ../../../библиотека/SRC/Главный 
    

Надеюсь, это поможет!

1
Flo

Я вижу, что вы следите за этим: https://github.com/square/gradle-Android-test-plugin

Я думаю, что вы должны изменить вашу @RunWith(RobolectricTestRunner.class) на @RunWith(RobolectricGradleTestRunner.class)

0
Eugen Martynov