我使用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)));
任何人都可以帮助我检查颜色是否匹配?我的方式每次都失败了......谢谢
答案 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)
。