无法在软件包中找到资源ID#0x7f09001c [android,org.robobolectric.default]



我正在使用Roboletric进行一些测试,但是我遇到了一个无法解决的问题。当我运行测试时,出现以下错误:

android.content.res.res.resources $ notfoundException:在packages [android,org.robobolectric.default中找不到资源ID#0x7f09001c]

at org.robobolectric.shadows.shadowassetmanager.getResname(ShadowassetManager.java:925)

at org.robolectric.shadows.shadowassetmanager.loadxmlresourceparser(ShadowassetManager.java:439)

at org.robolectric.shadows.shadowresources.loadxmlresourceparser(Shadowresources.java:221)

at android.content.res.res.resources.loadxmlresourceparser(Resources.java)

at android.content.res.res.resources.getlayout(resources.java:852)

at android.view.layoutinflater.inflate(layoutinflater.java:394)

at android.view.layoutinflater.inflate(layoutinflater.java:352)

访问com.android.internal.policy.impl.phopewindow.setcontentview(phonewindow.java:256)

at android.app.activity.setContentView(activity.java:1867)

com.example.robertoassad.roboboletrictest.mainactivity.oncreate(mainActivity.java:15)

at android.app.activity.performcreate(activity.java:5008)

at org.robobolectric.util.reflectionhelpers.callinstancemethod(reflectionHelpers.java:232)

at org.robolectric.android.controller.activitycontroller $ 1.run(activitycontroller.java:58)

at org.robolectric.shadows.shadowlooper.runpaused(Shadowlooper.java:364)

at org.robolectric.shadows.coreshadowsadapter $ 1.runpaused(coreshadowsadapter.java:26)

at org.robolectric.android.controller.activitycontroller.create(activitycontroller.java:55)

at org.robolectric.android.controller.activitycontroller.create(activitycontroller.java:65)

at org.robolectric.android.controller.activitycontroller.setup(activitycontroller.java:157)

at org.robolectric.robolectric.setupactivity(robolectric.java:101)

在com.example.robertoassad.roboboletrictest.mainactivitytest.clickinglogin_shouldstartloginactivity(mainActivityTest.java:20)

>

at org.junit.runners.model.frameworkmethod $ 1.RunreflectiveCall(frameworkmethod.java:50)

at org.junit.internal.runners.model.model.reflectivecallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.frameworkmethod.invokeexplosiveliver(frameworkmethod.java:47)

at org.junit.internal.runners.statement.invokemethod.evaluate(Invokemethod.java:17)

at org.robolectric.robobolectrictricterner $ helpertestrunner $ 1.Evaluate(robolectrictricternner.java:523)

at org.robobolectric.internal.sandboxtestrunner $ 2.评论家(Sandboxtestrunner.java:226)

at org.robolectric.internal.sandboxtestrunner.runchild(sandboxtestrunner.java:108)

at org.robolectric.internal.sandboxtestrunner.runchild(sandboxtestrunner.java:35)

at org.junit.runners.parentrunner $ 3.run(pardrunner.java:290)

at org.junit.runners.parentrunner $ 1.schedule(pardrunner.java:71)

at org.junit.runners.parentrunner.runchildren(pardrunner.java:288)

at org.junit.runners.parentrunner.access $ 000(parentrunner.java:58)

at org.junit.runners.parentrunner $ 2.evaluate(pardrunner.java:268)

at org.robolectric.internal.sandboxtestrunner $ 1.Evaluate(Sandboxtestrunner.java:62)

at org.junit.runners.parentrunner.run(pardrunner.java:363)

at org.junit.runner.junitcore.run(junitcore.java:137)

访问com.intellij.junit4.junit4ideatestrunner.startrunnerwithargs(junit4ideatestrunner.java:68)

art com.intellij.rt.execution.junit.ideatestrunner $ repeater.startrunnerwithargs(IdeateTretnerner.java:51)

art com.intellij.rt.execution.junit.junitstarter.preparestreamsandstart(junitstarter.java:242)

in com.intellij.rt.execution.junit.junitstarter.main(junitstarter.java:70)

in com.intellij.rt.execution.application.appmainv2.main(appmainv2.java:131)

at

com.example.robertoassad.alltestsmerge.mainactivity.oncreate(mainActivity.java:15)

在mainActivity.java上:15有错误在以下代码上:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

特别是:setContentView(R.layout.activity_main);

com.example.robertoassad.roboboletrictest.mainactivitytest.clickinglogin_shouldstartloginactivity(mainActivityTest.java:20)

>

在mainActivityTest.java上:20个错误是在:

MainActivity activity = Robolectric.setupActivity(MainActivity.class);

对我来说,我在这个问题上没有觉得...

详细信息

测试类位于文件夹上:appsrctestjava{package}

测试是:

@RunWith(RobolectricTestRunner.class)
@Config(manifest= Config.NONE)
public class MainActivityTest {
    @Test
    public void clickingLogin_shouldStartLoginActivity() {
        MainActivity activity = Robolectric.setupActivity(MainActivity.class);
        activity.findViewById(R.id.login).performClick();
        Intent expectedIntent = new Intent(activity, HomeActivity.class);
        Intent actual = ShadowApplication.getInstance().getNextStartedActivity();
        assertEquals(expectedIntent.getComponent(), actual.getComponent());
    }
}

这对我有用:

转到了Robolectric设置页面,并遵循了他们的指南,转到了最新版本。

换句话说

  • 添加了他们的最新版本,截至2017年2月17日:testImplementation "org.robolectric:robolectric:3.7.1"
  • 在我的build.graddle中添加了includeAndroidResources = true

例如,

android {
  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
}
dependencies {
    testImplementation "org.robolectric:robolectric:3.7.1"
}

在没有任何配置注释的情况下运行我的测试

@RunWith(RobolectricTestRunner.class)
public class MyTests {
    @Test
    public void singleTest() {
        //Do and verify or assert something
    }
}

您需要在@config中指定清单或常数,以便robolectric知道在哪里可以找到资源。config.none无法正常工作。

最新更新