我刚刚开始学习使用Robotium来测试我的应用。我编写了一个重置统计信息列表的测试用例,然后检查这些值是否等于0.代码如下:
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());
通过此声明,测试通过,但似乎需要花费不必要的长时间才能完成。我想知道是否有更好/更正确的方法,或者这是最好的方式吗?
由于
答案 0 :(得分: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的值为true!
答案 1 :(得分:-1)
您始终可以使用waitForActivity并选择特定的超时。solo.waitForActivity(YourActivity.class, timeout);