首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试androidx.fragment.app.Fragment.onCreateOptionsMenu()?

如何测试androidx.fragment.app.Fragment.onCreateOptionsMenu()?
EN

Stack Overflow用户
提问于 2018-12-21 16:24:53
回答 1查看 433关注 0票数 2

我在将一些旧的Robolectric 3.x测试转换成新风格时遇到了麻烦(同时也转换成了AndroidX )。

我的设置:- Android Gradle插件3.2.1 - Robolectric 4.1

一些相关配置(gradle.properties):

代码语言:javascript
复制
android.useAndroidX=true
android.enableJetifier=false

注意,我没有使用android.enableUnitTestBinaryResources (因为在这个版本的Android Gradle插件中它不能在Windows上工作)。

我的片段(代码片段):

代码语言:javascript
复制
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    logger.debug(String.format("onCreateOptionsMenu(menu=[%s], inflater=[%s])", menu, inflater));

    inflater.inflate(R.menu.key_details_actions, menu);

key_details_actions.xml (完整):

代码语言:javascript
复制
<?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>

ic_return_key_wrapper.xml (完整):

代码语言:javascript
复制
<?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>

我的测试执行以下操作(崩溃):

代码语言:javascript
复制
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));

堆栈跟踪:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-01-01 02:35:43

您还应该将下一行放到android DSL中:

代码语言:javascript
复制
   testOptions {
     unitTests {
       returnDefaultValues = true
       includeAndroidResources = true
     }
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53881385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档