2016-10-14 10 views
0

私はエスプレッソを使用してUIテストを実装しています。 私の上司は、特定のアクションの後で、linearLayoutが新しい、正しい色を持っていることを確認したいと思っています。私はこのLinearLayout getBackground()。getColor()戻り値が間違っています。

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

私はこの

.check(matches(withBgColor(R.color.grey_300))); 

などのマッチャができ呼ん

Log: CustomMatcher: 17170432 vs -2039584 

それは次のように行われています色が合っているかどうかを私が確認できる方法は誰ですか?私がやった方法は、感謝

答えて

2

問題がカラーリソースIDの両方が整数として実装されていることである...毎回失敗します。色自体の代わりに、リソース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

関連する問題