Начать работу для тестирования

У меня есть приложение Quiz с использованием Realm db. Каждый раз, когда пользователь выбирает ответ, она нажимает кнопку и появляется новый текст для вопроса. Это до тех пор, пока она не дойдет до конца, когда я начну новую активность и покажу оценку, основанную на правильных ответах.

Как мне начинать/тестировать (с эспрессо, я думаю), что активность без необходимости вводить вручную каждый раз все ответы и нажимать кнопку после каждого ответа, пока не дойду до последнего?

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

Ответ 1

Вы можете запустить следующее мероприятие с таргетингом на него следующим образом:

@RunWith(AndroidJUnit4.class)
public class NextActivityTest {

  @Rule
  public ActivityTestRule<NextActivity> activityRule 
     = new ActivityTestRule<>(
        NextActivity.class,
        true,     // initialTouchMode
        false);   // launchActivity. False to customize the intent

  @Test
  public void intent() {
    Intent intent = new Intent();
    intent.putExtra("your_key", "your_value");

    activityRule.launchActivity(intent);

    // Continue with your test
  }
}

Полный пример: https://github.com/chiuki/android-test-demo

Сообщение в блоге: http://blog.sqisland.com/2015/04/espresso-21-activitytestrule.html

Ответ 2

Сначала рассмотрим этот вопрос: Android Monkey Runner

Затем вы можете увидеть эти руководства: Monkey Runner

Это позволяет использовать Python для проверки активности вашего Android вне вашего источника. Итак, вы можете активировать вещи и перейти к определенным действиям, например:

#! /usr/bin/env monkeyrunner

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
from random import randint

print "get device"
device = MonkeyRunner.waitForConnection()
package = 'my.packaget'
activity = 'my.package.activity'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)

#use commands like device.touch and device.drag to simulate a navigation and open my activity

#with your activity opened start your monkey test
print "start monkey test"
for i in range(1, 1000):
    #here i go emulate only simple touchs, but i can emulate swiper keyevents and more... :D
    device.touch(randint(0, 1000), randint(0, 800), 'DOWN_AND_UP')

print "end monkey test"

сохраните его, а затем запустите: monkeyrunner test.py

Ответ 3

Вы можете использовать намерение запуска активности дозвона, используя приведенный ниже код.

    @Rule    
public IntentsTestRule<DialerActivity> mActivityRule = new IntentsTestRule<>(
            DialerActivity.class);

    private static final String PHONE_NUMBER = "1234567890";
    private static final Uri INTENT_DATA_PHONE_NUMBER = Uri.parse("tel:" + PHONE_NUMBER);
    private static String PACKAGE_ANDROID_DIALER = "com.android.phone";

    static {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            // Starting with Android Lollipop the dialer package has changed. 

            PACKAGE_ANDROID_DIALER = "com.android.server.telecom";
        }
    }

    @Test    public void testDialerIntent()throws Exception
    {
        intending(not(isInternal())).respondWith(new Instrumentation.ActivityResult(Activity.RESULT_OK, null));
        onView(withId(R.id.edit_text_caller_number)).perform(typeText(PHONE_NUMBER));
        onView(withId(R.id.button_call_number)).perform(click());
        intended(allOf(
                hasAction(Intent.ACTION_CALL),
                hasData(INTENT_DATA_PHONE_NUMBER),
                toPackage(PACKAGE_ANDROID_DIALER)));
    }


}

Для более подробного описания обратитесь к моему сообщению в блоге - http://qaautomated.blogspot.in/2016/02/how-to-test-dialer-activity-with.html