在RecyclerView项目中测试子文本视图的颜色始终失败

时间:2019-05-18 12:55:29

标签: android-recyclerview android-espresso

我正在尝试在recyclerView中测试textView的颜色。 每个项目都有一个子文本视图。根据条件,文本颜色可能是两种变体之一:

int colorLightGrey = context.getColor(R.color.color_LIGHT_GRAY);
int colorBlack = context.getColor(R.color.color_BLACK);

代码:

@Before
    public void setUp() {
        context = getInstrumentation().getTargetContext();
    }
@Test
public void matchWeekDaysColors() {
    int colorLightGrey = context.getColor(R.color.color_LIGHT_GRAY);
    int colorBlack = context.getColor(R.color.color_BLACK);
    String monday = context.getString(R.string.monday_abbreviated);
    ViewInteraction viewInteraction = onView(withId(R.id.recycler_view)).perform(RecyclerViewActions.scrollToPosition(3));
    viewInteraction.check(matches(hasDescendant(allOf(withId(R.id.monday_text_view), withText(monday), textViewTextColorMatcher(colorLightGrey)))));
}

public static Matcher<View> textViewTextColorMatcher(final int matcherColor) {
        return new BoundedMatcher<View, TextView>(TextView.class) {
            @Override
            public void describeTo(Description description) {
                description.appendText("with text color: " + matcherColor);
            }
            @Override
            protected boolean matchesSafely(TextView textView) {
                return matcherColor == textView.getCurrentTextColor();
            }
        };
    }

textViewTextColorMatcher from here

由于文本视图的颜色为黑色,因此该断言必须失败,但是确实可以通过。用colorBlack替换颜色也通过了测试。

据我所理解的这段代码,仅当项具有具有给定id,给定文本和给定颜色的后裔时,测试才能通过。它不能同时是两种颜色。 用不同的文本替换withText(monday)失败,这是预期的行为。 textViewTextColorMatcher看起来也不错。

那么,我应该如何重写匹配器或检查语句以使测试有效?感谢您的帮助。

0 个答案:

没有答案