我正在使用 Robolectric 和 Mockito,想要验证异步任务是否已启动。 这是我的代码:
AlertDialog.Builder alert = new AlertDialog.Builder(mContext);
alert.setTitle(R.string.warning_text);
alert.setMessage(message);
alert.setPositiveButton(R.string.ok, yesListener);
alert.setNegativeButton(R.string.cancel, noListener);
alert.show();
private DialogInterface.OnClickListener yesListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
startAsyncTask();
}
};
这是我的测试用例
AlertDialog warningDialog = ShadowAlertDialog.getLatestAlertDialog();
Assert.assertTrue(warningDialog.isShowing());
warningDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
verify(mySpy).startAsyncTask();
测试在验证时失败并出现“需要但未调用”错误。但是 onClick 方法确实会触发。
但是当像下面这样在行中定义监听器时,它可以工作
AlertDialog.Builder alert = new AlertDialog.Builder(mContext);
alert.setTitle(R.string.warning_text);
alert.setMessage(message);
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i){
startAsyncTask();
}
});
alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i){
dialogInterface.dismiss();
}
});
alert.show();
谁能告诉我这两者有什么区别吗?
最佳答案
Can any one tell what is the difference between the two?
不确定这是否是问题所在,但在第一个声明中您有 yesListener
和 noListener
:
alert.setPositiveButton(R.string.ok, yesListener);
alert.setNegativeButton(R.string.cancel, noListener);
虽然点击监听器名为 driverOkClickListener
,但它似乎未使用:
private DialogInterface.OnClickListener driverOkClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
startAsyncTask();
}
};
也许您想要 driverOkClickListener
而不是 yesListener
?
关于java - 安卓测试: verify onClickListener using private anonymous class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28806538/