2016-10-14 3 views
0

Я использую UI Tests, используя эспрессо. Мой босс хочет, чтобы я проверил, что после определенного действия у linearLayout есть новый и правильный цвет. Я написал пользовательский Искатель, который выглядит следующим образомLinearLayout getBackground(). GetColor() return wrong int value

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))); 

Может кто-нибудь поможет мне, как я могу проверить, соответствует ли цвет? То, как я сделал не удается каждый раз ... Спасибо

ответ

2

Проблема заключается в том, что как цвет и Ресурс цветного ID реализованы в виде целых чисел. Вы передаете значение R.color.grey_300, которое является сгенерированным числом, представляющим идентификатор ресурса, вместо самого цвета.

Вы должны вместо этого соответствовать следующим образом: .check(matches(withBgColor(context.getColor(R.color.grey_300))));

Если вы обеспокоены тем, что getColor() является устаревшим, используйте вместо ContextCompat.getColor(context, R.color.grey_300).

+0

Спасибо, что сработал. Какая глупость ... Спас мой день! – glethien

+0

Нет проблем! То же самое случилось со мной некоторое время назад, когда мы использовали «ArgbEvaluator» для анимации некоторых значений цвета ... – npace