【问题标题】:Robolectric Test for ProgressDialog in androidandroid中ProgressDialog的Robolectric测试
【发布时间】:2019-12-18 04:31:41
【问题描述】:

我有两种方法

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());
}

有什么想法吗?提前致谢!

【问题讨论】:

    标签: java android unit-testing testing robolectric


    【解决方案1】:

    看起来,在对话框真正被隐藏之前,检查对话框是否显示的代码执行得太快了。我想建议在执行之间添加一个有意的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

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2015-05-23
      相关资源
      最近更新 更多