测试的方法(在主活动中)
//This Method allows you to set the LeftDrawable Image to a grayed out (drawableDown)
//image for 300 millseconds then returns the LeftDrawable Image back to the orignal
//(drawableUp).On a button.
void buttonPressFeedbackLeft(final Button button, final int drawableDown,
final int drawableUp) {
button.setCompoundDrawablesWithIntrinsicBounds(drawableDown, 0, 0, 0);
button.postDelayed(new Runnable() {
public void run() {
button.setCompoundDrawablesWithIntrinsicBounds(drawableUp, 0,
0, 0);
}
}, 300);
}
在测试项目中进行测试:(活动和 i(意图)已设置)
public void testbuttonPressFeedback(){
/*
* Start activity
*/
activity = startActivity(i, null, null);
/*
* get the backButton
*/
Button backButton = (Button) activity.findViewById(R.id.bottem_bar_prev);
/*
* get the backButton image (up and down image) as a Drawable
*/
int drawableDown = R.drawable.ic_menu_back_gray;
int drawableUp = R.drawable.ic_menu_back;
/*
* create a Drawable with the ResId
*/
Drawable drawableDownImage = activity.getResources().getDrawable(drawableDown);
Drawable drawableUpImage = activity.getResources().getDrawable(drawableDown);
/*
* Simulate button being pressed (running the buttonPressFeedback() method)
*/
activity.buttonPressFeedbackLeft(prevButton, drawableDown, drawableUp);
/*
* get the drawable array [left, top, right, bottom]
* compare drawable with the drawable found on the button.
*/
Drawable[] d = prevButton.getCompoundDrawables();
assertEquals(drawableDownImage,d[0]);
}
堆栈跟踪:
junit.framework.AssertionFailedError: 预期:android.graphics.drawable.BitmapDrawable@413e7428 但是 是:android.graphics.drawable.BitmapDrawable@413e75c0
问题
我假设对象不一样。所以我试图研究获取资源 ID 并比较它们,但我认为这是不可能的?
有没有另一种方法来比较按钮上显示的可绘制对象?
遗憾的是,如果没有代码中的任何工作,这是不可能的,因为您正确地注意到,无法从中获取可绘制对象资源 ID。你要做的是在设置可绘制对象的代码中,让它做一些事情,比如在图像视图上设置一个标签,并使用它来检查它是否具有正确的标签。这可能是在骗你,这不是一个精确的测试,但只要你测试这个按钮的所有状态以及应该显示的可绘制对象,它可能就足够了。因此,在同一视图上设置可绘制对象 ID 后,调用 setTag(R.id.xxx) 为其提供与您期望的绘制相关的 int。