【发布时间】:2023-03-08 07:18:01
【问题描述】:
我正在使用 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();
谁能说出两者的区别?
【问题讨论】:
标签: java android mockito robolectric