如何测试androidx.fragment.app.fragment.onCreateOptions菜单()?
我很难将一些旧的Robolectric 3.x测试转换为新的样式(同时也转换为AndroidX) 我的设置: -Android Gradle插件3.2.1 -机器人分子4.1 一些相关配置(gradle.properties): 注意,我没有使用android.enableUnitTestBinaryResources(因为在这个版本的android Gradle插件中,它在Windows上不起作用) 我的片段(片段): key_details_actions.xml(完整): 堆栈跟踪:如何测试androidx.fragment.app.fragment.onCreateOptions菜单()?,android,robolectric,android-vectordrawable,androidx,Android,Robolectric,Android Vectordrawable,Androidx,我很难将一些旧的Robolectric 3.x测试转换为新的样式(同时也转换为AndroidX) 我的设置: -Android Gradle插件3.2.1 -机器人分子4.1 一些相关配置(gradle.properties): 注意,我没有使用android.enableUnitTestBinaryResources(因为在这个版本的android Gradle插件中,它在Windows上不起作用) 我的片段(片段): key_details_actions.xml(完整): 堆栈跟踪: an
android.content.res.Resources$NotFoundException: File D:\Git\xxx\application\build\intermediates\merged-not-compiled-resources\debug\drawable\ic_return_key_wrapper.xml from drawable resource ID #0x7f0800d5
at android.content.res.Resources.loadDrawable(Resources.java:2096)
at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:283)
at org.robolectric.internal.bytecode.ShadowImpl.directlyOn(ShadowImpl.java:56)
at org.robolectric.shadow.api.Shadow.directlyOn(Shadow.java:56)
at org.robolectric.shadows.ShadowResources.loadDrawable(ShadowResources.java:231)
at android.content.res.Resources.loadDrawable(Resources.java)
at android.content.res.Resources.getDrawable(Resources.java:700)
at org.robolectric.fakes.RoboMenuItem.setIcon(RoboMenuItem.java:107)
at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:399)
at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451)
at android.view.MenuInflater.parseMenu(MenuInflater.java:188)
at android.view.MenuInflater.inflate(MenuInflater.java:110)
您还应该在
android
DSL的下一行:
testOptions {
unitTests {
returnDefaultValues = true
includeAndroidResources = true
}
}
我再也不能复制这个(Android Gradle插件3.3.2和Robolectric 4.2.1)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@+id/action_handin"
android:icon="@drawable/ic_return_key_wrapper"
android:title="@string/action_key_hand_in"
android:visible="false"
app:showAsAction="ifRoom|withText"
/>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<!-- https://stackoverflow.com/questions/35813199/how-can-i-use-vectordrawable-with-the-android-toolbar -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_return_key"/>
</selector>
final KeyDetailsActivity activity = Robolectric.buildActivity(KeyDetailsActivity.class)
.create(instanceState).start().get();
activity.getSupportFragmentManager().beginTransaction()
.add(R.id.container_key_fragment_details, fragment).commit();
final Context context = fragment.requireContext();
final Menu menu = new RoboMenu(context);
fragment.onCreateOptionsMenu(menu, new MenuInflater(context));
android.content.res.Resources$NotFoundException: File D:\Git\xxx\application\build\intermediates\merged-not-compiled-resources\debug\drawable\ic_return_key_wrapper.xml from drawable resource ID #0x7f0800d5
at android.content.res.Resources.loadDrawable(Resources.java:2096)
at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:283)
at org.robolectric.internal.bytecode.ShadowImpl.directlyOn(ShadowImpl.java:56)
at org.robolectric.shadow.api.Shadow.directlyOn(Shadow.java:56)
at org.robolectric.shadows.ShadowResources.loadDrawable(ShadowResources.java:231)
at android.content.res.Resources.loadDrawable(Resources.java)
at android.content.res.Resources.getDrawable(Resources.java:700)
at org.robolectric.fakes.RoboMenuItem.setIcon(RoboMenuItem.java:107)
at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:399)
at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:451)
at android.view.MenuInflater.parseMenu(MenuInflater.java:188)
at android.view.MenuInflater.inflate(MenuInflater.java:110)
testOptions {
unitTests {
returnDefaultValues = true
includeAndroidResources = true
}
}