1

アプリのテストに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());

このステートメントでテストは合格しますが、完了するのに不必要に長い時間がかかるようです。これを行うためのより良い/正しい方法があるのか​​、それともこれが最善の方法であるのか疑問に思いました。

ありがとう

4

2 に答える 2

4

あなたは何かを待たなければならないでしょう、あなたが選ぶものはあなたのアプリケーションに依存します、そしてそれを見ずに私は待つのに最も良いものになるものに答えることができません。

リセットを行うためにどのような視覚的指標がありますか?新しいアクティビティを開いていますか?完了したことを示すテキストはありますか?文字通り3つのテキストフィールドだけの場合。もしそうなら、solo.waitfortext( "0")を使用することができますが、より良い方法は、条件の新しい概念を使用し、solo.waitForCondition(method)を使用することです(条件はおそらくテキストを待つことです) 0になりますが、条件を1つの場所に配置し、後でより良い方法を見つけた場合は、一度だけ変更する必要があります)。

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であることを表明できます。

于 2013-02-04T15:15:37.253 に答える
-1

いつでもwaitForActivityを使用して、特定のタイムアウトを選択できます。solo.waitForActivity(YourActivity.class, timeout);

于 2013-06-24T14:27:52.083 に答える