gpt4 book ai didi

java - Robolectric 3 找不到资源错误

转载 作者:行者123 更新时间:2023-11-30 08:48:07 33 4
gpt4 key购买 nike

我正在尝试将 Robolectric 3 整合到我的项目中,但我遇到的问题似乎比我预期的要多。目前,我正在尝试通过

在我的测试类的 setUp 方法中实例化一个简单的 Activity
MyActivity activity = Robolectric.setupActivity(MyActivity.class);

我已将以下内容放在我的测试文件的顶部:

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)

在 MyActivity 中,我只需通过以下方式访问字符串数组资源:

getResources().getStringArray(resId)

在我运行测试类之后(没有任何测试方法,只有实例化 Activity 的 setUp 方法),我得到错误:

android.content.res.Resources$NotFoundException: String array resource ID #0x7f0c0000
at android.content.res.Resources.getStringArray(Resources.java:502)
at com.alivemobile.tpff.slidingtabs.views.SlidingTabsActivity$3.onItemSelected(SlidingTabsActivity.java:102)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:897)
at android.widget.AdapterView.access$200(AdapterView.java:48)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:865)
at org.robolectric.util.Scheduler.runOrQueueRunnable(Scheduler.java:230)
at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:85)
at org.robolectric.util.Scheduler.post(Scheduler.java:72)
at org.robolectric.shadows.ShadowView.post(ShadowView.java:401)
at android.view.View.post(View.java)
at android.widget.AdapterView.selectionChanged(AdapterView.java:882)
at android.widget.AdapterView.checkSelectionChanged(AdapterView.java:1047)
at android.widget.Spinner.layout(Spinner.java:586)
at android.widget.Spinner.onLayout(Spinner.java:527)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.support.v7.widget.Toolbar.layoutChildLeft(Toolbar.java:1565)
at android.support.v7.widget.Toolbar.onLayout(Toolbar.java:1504)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:573)
at android.widget.FrameLayout.onLayout(FrameLayout.java:508)
at android.view.View.layout(View.java:15596)
at android.view.ViewGroup.layout(ViewGroup.java:4966)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2072)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1829)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at org.robolectric.shadows.ShadowMessageQueue.dispatchMessage(ShadowMessageQueue.java:130)
at org.robolectric.shadows.ShadowMessageQueue.access$100(ShadowMessageQueue.java:30)
at org.robolectric.shadows.ShadowMessageQueue$1.run(ShadowMessageQueue.java:95)
at org.robolectric.util.Scheduler$ScheduledRunnable.run(Scheduler.java:269)
at org.robolectric.util.Scheduler.runOneTask(Scheduler.java:179)
at org.robolectric.util.Scheduler.advanceTo(Scheduler.java:160)
at org.robolectric.util.Scheduler.advanceBy(Scheduler.java:143)
at org.robolectric.util.Scheduler.unPause(Scheduler.java:54)
at org.robolectric.shadows.ShadowLooper.unPause(ShadowLooper.java:266)
at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:306)
at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:45)
at org.robolectric.util.ActivityController.visible(ActivityController.java:173)
at org.robolectric.util.ActivityController.setup(ActivityController.java:210)
at org.robolectric.Robolectric.setupActivity(Robolectric.java:46)
at com.alivemobile.tpff.events.views.list.EventsListTests.setUp(EventsListTests.java:20)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:251)
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188)
at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

我四处搜索,看到一些人实现了自定义测试运行器,我也尝试了一些,但它们似乎都过于复杂,没有太多解释发生了什么。我错过了什么?

提前致谢。

更新 1玩了一会儿之后,我发现如果我在我的 setUp() 方法中实例化 Activity :

Robolectric.buildActivity(SlidingTabsActivity.class).create().start().resume().get();

而不是:

Robolectric.setupActivity(SlidingTabsActivity.class);

测试没有给出资源未找到错误。

但是,如果我通过以下方式启动 Activity :

Robolectric.buildActivity(SlidingTabsActivity.class).create().start().resume().visible().get();

然后我收到找不到资源错误。

最佳答案

我们在使用 robolectric 的测试中遇到了类似的问题。这是因为我们有不同的构建风格,它们的 applicationId 与我们的包结构不同。RobolectricGradleTestRunner 类默认从您的 src/main 文件夹中选择资源、 Assets 和 list 。所以你不需要实现自定义测试运行器。检查您的 gradle 构建中的 applicationId 是否与包结构不同。您的 applicationId 可能是 com.something.abc 而您的基础包可能是 com.something.xyz如果您为每种构建风格使用不同的构建风格和 applicationId,那么我建议将以下内容添加到您的测试套件中。

@Config(constants = BuildConfig.class, packageName = "com.something.xyz")

关于java - Robolectric 3 找不到资源错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32110530/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com