#android #android-espresso
#Android #android-эспрессо
Вопрос:
Я выполняю тесты пользовательского интерфейса с использованием espresso. Мой босс хочет, чтобы я проверил, что после определенного действия 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:
Проблема в том, что и цвет, и идентификатор цветового ресурса реализованы как целые числа. Вы передаете значение R.color.grey_300
, которое представляет собой сгенерированное число, представляющее идентификатор ресурса, вместо самого цвета.
Вместо этого вы должны соответствовать таким образом: .check(matches(withBgColor(context.getColor(R.color.grey_300))));
Если вы беспокоитесь, что getColor()
это устарело, используйте ContextCompat.getColor(context, R.color.grey_300)
вместо этого.
Комментарии:
1. Спасибо, что сработало. Какая глупая ошибка.. Спас мой день!
2. Нет проблем! То же самое произошло со мной некоторое время назад при использовании
ArgbEvaluator
для анимации некоторых значений цвета…