我刚刚开始学习使用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());
}
测试在不应该失败时失败,因为它在重置结果之前检查了 TextView 的值。为了解决这个问题,我添加了这一行:
solo.waitForActivity(solo.getCurrentActivity().toString());
有了这个声明,测试就通过了,但似乎需要不必要的很长时间才能完成。我想知道是否有更好/正确的方法可以做到这一点,或者这是最好的方法?
谢谢
你将不得不等待一些东西,你选择什么将取决于你的应用程序,如果不看它,我无法回答什么是最好的等待。
重置发生时有哪些可视指示器? 您是否打开了新活动?有文字说它已经完成吗?如果它实际上只是三个文本字段。如果是这样,那么您可能会设法使用 solo.waitfortext("0"),尽管更好的方法是使用条件的新概念并使用 solo.waitForCondition(method)(条件可能是等待文本为 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;
}
}
}
然后,您可以断言等待条件的值为真!
您始终可以使用 waitForActivity 并选择特定的超时。solo.waitForActivity(YourActivity.class, timeout);