簡體   English   中英

android中ProgressDialog的Robolectric測試

[英]Robolectric Test for ProgressDialog in android

我有兩種方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM