Тестовые аннотации Android с Robotium - PullRequest
8 голосов
/ 23 октября 2010

В настоящее время я создаю приложение для Android и использую Robotium для функциональных тестов (кстати, не используйте Robotium ни на чем другом, кроме Android 1.6, он слишком глючный).

Некоторые из этих тестов имеют случайную тенденцию к сбою, в основном, в Robotium отсутствует текстовое поле или происходит тайм-аут, а не чтение текста.Я пытаюсь использовать аннотацию @FlakyTest, чтобы они запускались два или три раза, прежде чем выдать ошибку теста.Однако аннотация не работает, тесты не запускаются повторно после сбоя.

Вот как я использую аннотацию:

public class ClassName extends ActivityInstrumentationTestCase2<HomeActivity>{

        @LargeTest
        @FlakyTest(tolerance=3)
        public void testMethod(){

        //Here I run my roboitium scripts.

        }
}

Затем я запускаю ее из командыстрока:

adb shell am instrument -w com.jayway.test / android.test.InstrumentationTestRunner

Ни затмение, ни выполнение тестов из командной строки не учитываютнестабильная аннотация теста.Кто-нибудь видит ошибку с тем, как я пытаюсь применить @FlakyTest?

Ответы [ 4 ]

3 голосов
/ 15 апреля 2012

В общем, при написании тестов для Android (с Robotium или без) вы должны быть намного осторожнее. Вы не можете просто сказать «это видно». Вам нужно обернуть все в цикле «ожидания», так сказать «подождите, пока это не станет видимым». Это особенно проблема при работе в эмуляторах, потому что иногда дела идут долго и без веской причины. Без циклов ожидания у вас никогда не будет последовательного запуска. У нас есть несколько сотен тестов, и нам никогда не приходилось использовать аннотацию FlakyTest.

3 голосов
/ 27 февраля 2011

Я не вижу проблем с использованием аннотации @FlakyTest.

Я собрал быстрый тестовый пример для проверки @FlakyTest и Robotium (v2.2):

public class FlakyTestCase extends ActivityInstrumentationTestCase2<Main> {

private static int count = 0;
private Solo solo;

public FlakyTestCase() {
    super("com.stackoverflow.example", Main.class);
}

@Override
public void setUp() throws Exception {
    solo = new Solo(getInstrumentation(), getActivity());
}

@LargeTest
@FlakyTest(tolerance=3)
public void testFlaky(){
    Log.e("FlakeyTestCase", "Execution Count:" + ++count);

    solo.assertCurrentActivity(null,Main.class);
    solo.clickOnText("Doesn't Exist");

    Log.e("FlakeyTestCase", "Shouldn't make it here");
}
}

LogCat показывал следующие сообщения:

Execution Count: 1
Execution Count: 2
Execution Count: 3

Так что аннотацию @FlakyTest определенно вызывали. (Окончательный) провал теста был показан как:

junit.framework.AssertionFailedError: The text: Doesn't Exist is not found!

И сообщение "Shouldn't make it here" никогда не регистрировалось.

Насколько я понимаю, нет никаких проблем с тем, как вы объявили аннотацию, или какие-либо проблемы с @FlakyTest и Robotium, v2.2.

Возможно, есть проблема с другой частью вашего тестового кода?

0 голосов
/ 05 мая 2014

Robotium отсутствует текстовое поле или истекло время ожидания, значит не чтение текста Мы должны четко проверить, существует ли текст или любой другой на экране, тогда нужно только выполнить такие действия, как

if(solo.searchText("Doesn't Exist", true){
solo.clickOnText("Doesn't Exist");
}

Аналогично, если какие-либо компоненты, такие как кнопка или другие, мы можем добиться этого с помощью приведенной выше логики.

0 голосов
/ 15 апреля 2012

Добавьте это к своему коду:

import android.util.Log;
...