如何修复此Robolectric测试中的上述错误?请注意,我在Android Studio Beta 0.8.2中运行我的测试。我在测试中发现了Gradle Robolectric Resources NotFoundException,表明我需要使用@Config
注释指定AndroidManifest。但是,Android Studio通过将构建类型与main
合并而生成清单的最终版本。那么有什么其他建议来解决这个错误?
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest {
private MainActivity mActivity;
@Before
public void setUp() {
mActivity = Robolectric.buildActivity(MainActivity.class).create().visible().get();
}
@Test
public void testActivityNotNull() {
assertThat(mActivity).isNotNull();
}
@Test
public void testBaseballCardDetails() {
FragmentManager fm = mActivity.getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag(FragmentTags.EDIT_CARD);
assertThat(fragment).isNotNull().isAdded().isVisible();
}
}
堆栈追踪:
android.content.res.Resources$NotFoundException: Resource ID #0x7f0d0002
at android.content.res.Resources.getValue(Resources.java:1118)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2304)
at android.content.res.Resources.getLayout(Resources.java:934)
at android.support.v7.internal.view.SupportMenuInflater.inflate(SupportMenuInflater.java:115)
at bbct.android.common.activity.MainActivity.onCreateOptionsMenu(MainActivity.java:84)
抛出异常的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.main, menu); // Line 84
return super.onCreateOptionsMenu(menu);
}
答案 0 :(得分:1)
这是known problem,也会影响ActionBarSherlock
。您可以尝试使用Github问题中的 sneuberger-amazon 解决方案:
这也适用于appcompat-v7 ActionBar。
问题是Robolectric提供了ShadowMenuInflater,但它 不提供ShadowSupportMenuInflater(这是appcompat 使用)。
你可以通过创建一个来解决这个问题 org.robolectric.shadows.ShadowSupportMenuInflater类,内容为:
package org.robolectric.shadows;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import android.support.v7.internal.view.SupportMenuInflater;
import android.view.Menu;
@Implements(SupportMenuInflater.class)
public class ShadowSupportMenuInflater extends ShadowMenuInflater {
@Implementation
public void inflate(int menuRes, Menu menu) {
super.inflate(menuRes, menu);
}
}
将此课程放在您自己项目的org.robolectric.shadows包中。 这样Robolectric会在寻找阴影时找到它 SupportMenuInflater,以便您的所有测试都能自动获取 (无需为每个测试添加影子配置。)
另外/另外,您可以尝试在测试类中设置@Config(qualifiers = "v10")
。