2010-10-22 6 views
8

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

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

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

public class ClassName extends ActivityInstrumentationTestCase2<HomeActivity>{ 

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

     //Here I run my roboitium scripts. 

     } 
} 

Затем я запустить его из командной строки:

ADB оболочки утра инструмент -w com.jayway.test/android.test .InstrumentationTestRunner

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

+1

Возможно, вы захотите спросить об этом в списке рассылки robotium. –

ответ

3

Я не вижу проблемы с использованием аннотации @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

Вы должны использовать последнюю версию Robotium (5.1) – Renas

-3

Добавьте это в ваш код:

import android.util.Log; 
+0

Ответ на этот вопрос даже по правильному вопросу? –

3

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

0

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

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

Похожие если любые компоненты, такие как кнопка или другие, мы можем достичь этого по логике выше.

Смежные вопросы