Android Espresso как писать тесты с помощью apk?

Я пользователь robotium, теперь переключаюсь на Espresso. Кто-нибудь может сказать мне, как писать тесты с помощью apk в espresso, как мы это делаем в robotium, не имея доступа к коду, но используя приложение apk.

А как получить доступ к представлениям без R.id.viewid в эспрессо? как мы делаем в robotium

solo.getview("viewidText")

Вот как мы это делаем в robotium

public class CoreTest extends ActivityInstrumentationTestCase2 {
private Solo solo;

//class name of the app launcher activity
private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.rex.binderapps.RecorderActivity";


private static Class<?> launcherActivityClass;

static {
    try {
        launcherActivityClass = Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }
}

@SuppressWarnings("unchecked")
public CoreRecordingTest() throws ClassNotFoundException {
    super(launcherActivityClass);
}

public void setUp() throws Exception {
    super.setUp();
    solo = new Solo(getInstrumentation());
    Test.setup(this);
    getActivity();
}

@Override
public void tearDown() throws Exception {
    solo.finishOpenedActivities();
    super.tearDown();
}
...

В эспрессо

 @RunWith(AndroidJUnit4.class)
public class MainActivityTest {

// RecorderActivity is not accessible
@Rule public final ActivityRule<RecorderActivity> main = new ActivityRule<>(RecorderActivity.class);

@Test
public void launchMain(){

  }
}

Как указать имя класса?


person Shivaraj Patil    schedule 27.04.2015    source источник
comment
ИМХО, UI Automator лучше подошел бы для такого рода интеграционного тестирования без исходных текстов.   -  person CommonsWare    schedule 27.04.2015
comment
@CommonsWare, спасибо, у нас есть сложные функциональные тесты, сделать их с помощью ui automator невозможно. У нас есть два отдельных проекта, поэтому на данный момент мы не можем интегрировать тесты эспрессо напрямую в основной проект, поэтому находим обходной путь для написания тестов с использованием apk, и как только тестовый проект будет готов, мы интегрируем с ним основной проект.   -  person Shivaraj Patil    schedule 28.04.2015


Ответы (1)


Вы можете использовать ту же технику отражения, чтобы указать класс в ActivityTestRule:

@RunWith(AndroidJUnit4.class)
public class MainActivityTest {

  private static final String CLASSNAME = "com.rex.binderapps.RecorderActivity";

  private static Class<? extends Activity> activityClass;
  static {
    try {
      activityClass = (Class<? extends Activity>) Class.forName(CLASSNAME);
    } catch (ClassNotFoundException e) {
      throw new RuntimeException(e);
    }
  }

  @Rule 
  public final ActivityTestRule<?> activityRule 
      = new ActivityTestRule<>(activityClass);

  @Test
  public void launchMain() {

  }
}
person chiuki    schedule 29.04.2015
comment
Да, я сделал то же самое, но в robotium solo.getView (view_name) дает доступ к просмотру, но эспрессо требует R.id.viewname, поскольку я сказал, что у меня нет доступа к коду, так каков обходной путь? как получить доступ к просмотру? помощь будет оценена. - person Shivaraj Patil; 29.04.2015
comment
Пожалуйста, задайте для этого другой вопрос. - person chiuki; 29.04.2015
comment
stackoverflow.com/questions/29946970/ - person Shivaraj Patil; 29.04.2015