LinearLayout getBackground()。getColor()返回错误的int值

时间:2016-10-14 08:12:19

标签: android android-espresso

我使用espresso实现UI测试。 我的老板要我检查一下,在某个动作之后,linearLayout有一个新的和正确的颜色。我写了一个自定义匹配器,看起来像这样

public static Matcher<View> withBgColor(final int color) {

    Checks.checkNotNull(color);

    return new BoundedMatcher<View, LinearLayout>(LinearLayout.class) {
        @Override
        public boolean matchesSafely(LinearLayout layout) {
            MyLog.debug(String.valueOf(color) + " vs " + String.valueOf(((ColorDrawable) layout.getBackground()).getColor()));
            return color == ((ColorDrawable) layout.getBackground()).getColor();
            //return color == (((PaintDrawable) layout.getBackground()).getPaint()).getColor();
        }
        @Override
        public void describeTo(Description description) {
            description.appendText("With background color: ");
        }
    };
}

我的问题是所提供的颜色与背景颜色的比较是不一样的。在应用程序中,我可以看到正确的颜色设置。它是这样完成的:

holder.linearLayout.setBackgroundColor(ctx.getResources().getColor(R.color.grey_300));

一旦测试试图比较它们彼此不同的值:

Log: CustomMatcher: 17170432 vs -2039584

我像这样称呼匹配器

.check(matches(withBgColor(R.color.grey_300)));

任何人都可以帮助我检查颜色是否匹配?我的方式每次都失败了......谢谢

1 个答案:

答案 0 :(得分:2)

问题是颜色颜色资源ID 都是作为整数实现的。您传递的值R.color.grey_300是表示资源ID的生成数字,而不是颜色本身。

您应该以这种方式匹配: .check(matches(withBgColor(context.getColor(R.color.grey_300))));

如果您担心不推荐使用getColor(),请改用ContextCompat.getColor(context, R.color.grey_300)