2013-02-04 119 views
1

我剛開始學習使用Robotium來測試我的應用程序。我寫了重置統計列表的測試用例,然後檢查,如果值等於0的代碼如下:Robotium - 等待活動的任務完成

public void testClearStats() { 
    solo.clickOnButton("Clear Stats"); 
    solo.clickOnButton("Yes"); 
    TextView views = (TextView) solo.getView(R.id.textViewsNum); 
    TextView prompts = (TextView) solo.getView(R.id.textPromptsNum); 
    TextView completions = (TextView) solo.getView(R.id.textCompleteNum); 
    assertEquals("0", views.getText().toString()); 
    assertEquals("0", prompts.getText().toString()); 
    assertEquals("0", completions.getText().toString()); 
} 

當它不應該,因爲它被檢查的測試失敗在重置結果之前,TextViews的值。爲了解決這個問題,我說這行:

solo.waitForActivity(solo.getCurrentActivity().toString()); 

這種說法測試通過,但它似乎採取不必要的長時間才能完成。我想知道是否有更好的/正確的方式來做這件事,或者這是做這件事的最好方法嗎?

感謝

回答

4

你將不得不等待的東西,你的選擇將取決於您的應用程序,不看它,我不能回答將是什麼等待的最好的事情。

您有什麼視覺指標可以重置?你有新的活動嗎?有文字告訴它已完成?如果它實際上只是三個文本字段。如果是,那麼你可以設法使用solo.waitfortext(「0」),但更好的方法是使用新的條件概念並使用solo.waitForCondition(方法)(條件可能是等待文本爲0,但你會把條件放在一個地方,然後如果你以後找到更好的方法,那麼你只需要改變它一次)。

public class WaitForReset implements Condition 
{ 

    public boolean isSatisfied() 
    { 
     TextView views = (TextView) solo.getView(R.id.textViewsNum); 
     TextView prompts = (TextView) solo.getView(R.id.textPromptsNum); 
     TextView completions = (TextView) solo.getView(R.id.textCompleteNum); 
     if(isViewZero(views) && isViewZero(prompts) && isViewZero(completions)) 
     { 
      return true 
     } 
     else 
     { 
      return false; 
     } 
    } 

    private isViewZero(TextView textView) 
    { 
     if((textView!=null) && (textView.getText().toString() ==0)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

然後,您可以斷言在waitforcondition是真正的價值!

+0

好吧我現在理解它背後的邏輯。然而,很難找到需要等待的東西。通過solo.waitForText()方法,我可以選擇具體查看哪些TextView?我在這個屏幕上有很多TextView,有些可以在清除統計之前以0開始。 –

+0

實際上沒有跡象表明統計數據已被清除,除了所有值都被重置。但是,如果所有這些值都已經爲0,那麼您無法確定測試是否正確執行,因爲這些值不會更改。 –

+0

你回答了你自己的問題,也是爲什麼在TDD你沒有通過測試失敗之前,你需要確保你的指標實際上發生了變化,所以你應該確保在重置之前值不是0,否則你永遠不會當然。儘管如此,對於整個測試而言,這是一個問題,而不是機器人。至於等待的部分,我會添加一些代碼來幫助你! –

-1

您可以隨時使用waitForActivity並選擇特定的超時時間。 solo.waitForActivity(YourActivity.class, timeout);

+1

這沒有意義 - 等待當前活動 – maszter