我正在尝试在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
看起来也不错。
那么,我应该如何重写匹配器或检查语句以使测试有效?感谢您的帮助。