Java Android测试:使用私有匿名类验证onClickListener
我正在使用Robolectric和Mockito,希望验证异步任务是否已启动。 这是我的密码:Java Android测试:使用私有匿名类验证onClickListener,java,android,mockito,robolectric,Java,Android,Mockito,Robolectric,我正在使用Robolectric和Mockito,希望验证异步任务是否已启动。 这是我的密码: AlertDialog.Builder alert = new AlertDialog.Builder(mContext); alert.setTitle(R.string.warning_text); alert.setMessage(message); alert.setPositiveButton(R.string.ok, yesListener); al
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();
有谁能说出两者的区别吗
有谁能说出两者的区别吗
不确定这是否是问题所在,但在第一个声明中,您有yesListener
和noListener
:
alert.setPositiveButton(R.string.ok, yesListener);
alert.setNegativeButton(R.string.cancel, noListener);
当click listener被命名为DriverRokClickListener
,它似乎未被使用时:
private DialogInterface.OnClickListener driverOkClickListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int i) {
startAsyncTask();
}
};
也许您想要的是
driverOkClickListener
而不是yesListener
?在第一个示例中,您没有将侦听器设置为对话框:
AlertDialog.Builder alert = new AlertDialog.Builder(mContext);
alert.setTitle(R.string.warning_text);
alert.setMessage(message);
alert.setPositiveButton(R.string.ok, driverOkClickListener);
alert.setNegativeButton(R.string.cancel, driverOkClickListener);
alert.show();
...
private DialogInterface.OnClickListener driverOkClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
startAsyncTask();
} else {
dialogInterface.dismiss();
}
}
};
是的,你的听众应该是yesListener。这是提问时的打字错误