java - android 中 ProgressDialog 的 Robolectric 测试

标签 java android unit-testing testing robolectric

我有两种方法

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/

相关文章:

android - 如何在 Android Kitkat 中使用 WebRTC?

python - 在 Django 应该传递的时候测试不传递

angular - 您如何在 ngOnInit 生命周期中测试可观察对象?

c# - 我可以在单元测试中写入控制台吗?如果是,为什么控制台窗口不打开?

Cygwin 上的 Java 路径问题

java - 在 Java 客户端应用程序中从 PHP 服务器接收 *.pdf 文件

java - 关于如何获得2个相同尺寸的组件进行水平线性布局的一些疑问?

android - 具有多个条件的 SQL Android 查询公式

java - 在 Java 中存储一组数字

java - JScrollPane 不在 JTextArea 中滚动