2013-02-04 108 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