Скажите Espresso запустить определенные тесты на эмуляторе.

У меня есть инструментальные тесты Android с Espresso. Некоторые из моих тестов необходимо запускать на эмуляторе — из-за использования LinkedIn TestButler (https://github.com/linkedin/test-butler). Эта библиотека переключает Wi-Fi/GSM для конкретных тестовых прогонов, поэтому эти тесты необходимо запускать на эмуляторе.

Мой вопрос: могу ли я аннотировать какие-либо конкретные тесты для запуска на эмуляторе, в то время как другие тесты выполняются на реальном устройстве?

Спасибо


person IgorGanapolsky    schedule 24.08.2017    source источник


Ответы (2)


Да, вы можете использовать аннотацию @ConditionalIgnore, как описано в http://www.codeaffine.com/2013/11/18/a-junit-rule-to-conditionally-ignore-tests/.

У вас будет что-то вроде

public class SomeTest {
  @Rule
  public ConditionalIgnoreRule rule = new ConditionalIgnoreRule();

  @Test
  @ConditionalIgnore( condition = NotRunningOnEmulator.class )
  public void testSomething() {
    // ...
  }
}

public class NotRunningOnEmulator implements IgnoreCondition {
  public boolean isSatisfied() {
    return !Build.PRODUCT.startsWith("sdk_google");
  }
}

РЕДАКТИРОВАТЬ

Для этого конкретного случая обнаружения устройства или эмулятора вы также можете использовать @RequiresDevice.

person Diego Torres Milano    schedule 25.08.2017
comment
В чем разница между этим правилом и правилом Apache: Issues.apache.org/jira/browse/GEODE-167 - person IgorGanapolsky; 25.08.2017

Самым простым решением, которое я нашел, является использование JUnit Assume API: http://junit.org/junit4/javadoc/4.12/org/junit/Assume.html

Итак, внутри тестовых методов, которые можно запустить только на эмуляторе, я поместил этот код:

Assume.assumeTrue("This test must be run in an emulator!", Build.PRODUCT.startsWith("sdk_google"));

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


Как видите, два других теста прошли нормально (обозначены зеленым цветом), и весь набор тестов смог запуститься.

person IgorGanapolsky    schedule 25.08.2017