我有两种方法
public void showProgress() {
progressDialog = ProgressDialog.show(LoanDemandDetails.this, "", resourceUtil.getLabelById(R.string.uploading_loan_demand), true, false);
}
和
public void onHideProgressDialog() {
progressDialog.hide();
}
我想使用 Robolectric 测试这些功能。
我已经为 showProgress
编写了一个测试用例,它通过了,如下所示。
@Test
public void showProgressDialog() {
activity.showProgress();
ProgressDialog dialog = (ProgressDialog) ShadowProgressDialog.getLatestDialog();
assertEquals("Uploading Loan Demand...", shadowOf(dialog).getMessage());
}
同样,当我为hideProgressDialog
编写测试用例时,它失败了。
@Test
public void hideProgressDialog(){
activity.showProgress();
activity.onHideProgressDialog();
ProgressDialog dialog1 = (ProgressDialog) ShadowProgressDialog.getLatestDialog();
assertFalse(dialog1.isShowing());
}
有什么想法吗?提前致谢!
最佳答案
看起来,在对话框实际隐藏之前,检查对话框是否显示的代码执行得太快了。我想建议在执行之间添加一个有意的 Thread.sleep
如下。
@Test
public void hideProgressDialog() throws Exception {
activity.showProgress();
activity.onHideProgressDialog();
// Introduce some intentional delay here
Thread.sleep(2000); // 2 seconds delay added
// Now check if the tests are passing.
ProgressDialog dialog1 = (ProgressDialog) ShadowProgressDialog.getLatestDialog();
assertFalse(dialog1.isShowing());
}
如果您使用的是 RxJava,则可以使用 TestScheduler
以优雅的方式执行此操作,而不是在测试代码中使用 Thread.sleep
。
关于java - android 中 ProgressDialog 的 Robolectric 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385478/