我正在使用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无法正常工作。