当前位置:  开发笔记 > Android > 正文

如何在Espresso中测试ActionMenuItemView的图标

如何解决《如何在Espresso中测试ActionMenuItemView的图标》经验,为你挑选了1个好方法。

我在操作栏中有一个按钮,其图标根据布尔值而更改。我想检查使用了哪个可绘制资源。

这是更改图标的代码:

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem item = menu.findItem(R.id.menu_favorite);
    if(mIsFavorite)
        item.setIcon(R.drawable.ab_icon_on);
    else
        item.setIcon(R.drawable.ab_icon_off);
}

当需要更改图标时,菜单无效:

// request menu update
supportInvalidateOptionsMenu();

最后,我要检查结果的espresso代码:

@Test
public void action_setUnsetFavorite() {
    // check favorite off
    onView(withImageDrawable(R.drawable.ab_icon_off))
            .check(matches(isDisplayed()));

    // click favorite button
    onView(withId(R.id.menu_favorite))
            .perform(click());

    // check favorite on
    onView(withImageDrawable(R.drawable.ab_icon_on))
            .check(matches(isDisplayed()));

请注意,我使用的是此处找到的自定义匹配器。



1> Barry Irvine..:

我不确定匹配器如何工作以及这是否是最好的响应,但是使用稍微不同版本的方法肯定行得通。

问题在于当前的匹配器仅适用于ImageViews。ActionMenuItemView实际上是textView的子类,因此不会匹配,并且也没有getDrawable()的方法。

请注意,这仍然需要原始帖子中的sameBitmap方法。

public static Matcher withActionIconDrawable(@DrawableRes final int resourceId) {
    return new BoundedMatcher(ActionMenuItemView.class) {
        @Override
        public void describeTo(final Description description) {
            description.appendText("has image drawable resource " + resourceId);
        }

        @Override
        public boolean matchesSafely(final ActionMenuItemView actionMenuItemView) {
            return sameBitmap(actionMenuItemView.getContext(), actionMenuItemView.getItemData().getIcon(), resourceId);
        }
    };
}

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有