2016-02-24 4 views
0

Использование: Cucumber-JVM with Android Instrumentation + Espresso).Тестирование устройства Android: Cucumber-jvm + Android Instrumentation

Ссылка Github link: https://github.com/mfellner/cucumber-android для этого. Простой образец работает отлично.

Проблема с огурцом-андроида + JVM инструментовки: Но в образце в ссылке, он использует ActivityInstrumentationTestCase2, который устарел. Я хотел бы использовать класс @Rule - ActivityTestRule, как сказал Google.

Вот мой вопрос: Для использования огуречный-JVM, я использую CucumberInstrumentationCore вместо testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner".

Таким образом, аннотации junit Android, такие как @Rule для ActivityTestRule, не обрабатываются CucumberInstrumentation. Так можно ли преодолеть эту проблему?

Тогда мое решение использовать огурец-jvm + андроид-инструментарий нужно вернуть назад. Мой вопрос заключается не только в устаревших классах, но и в глобальном плане, это хорошая идея пойти на огурец-jvm + андроид-инструментарий, поскольку он не может использовать инструментальные возможности из-за синтаксического анализа аннотаций.

ответ

8

Ваш бегун должен наследоваться от Android JUnitRunner:

public class Instrumentation extends AndroidJUnitRunner { 

private final CucumberInstrumentationCore instrumentationCore = new CucumberInstrumentationCore(this); 

@Override 
public void onCreate(final Bundle bundle) { 
    instrumentationCore.create(bundle); 
    super.onCreate(bundle); 
} 

@Override 
public void onStart() { 
    waitForIdleSync(); 
    instrumentationCore.start(); 
} 

Обратите внимание на супер класс был инициализирован в конце OnCreate.

Затем отредактируйте defaultConfig в файле build.grade:

defaultConfig { 
    applicationId "your.package.name" 

    testApplicationId "your.steps.package" 
    testInstrumentationRunner "your.package.Instrumentation"  
} 

И, наконец, класс определение шагов, которые унаследовали от ActivityInstrumentationTestCase2 должен выглядеть следующим образом:

прогонов функции
public class BaseStepDefinitions { 
public static final String TAG = BaseStepDefinitions.class.getSimpleName(); 

@Rule 
public ActivityTestRule<StartupActivity> mActivityRule = new ActivityTestRule<>(StartupActivity.class); 


@Before 
public void setUp() throws Exception { 
    mActivityRule.launchActivity(null); 
    mActivityRule.getActivity(); 
} 

/** 
* All the clean up of application's data and state after each scenario must happen here 
*/ 
@After 
public void tearDown() throws Exception { 

} 

@When("^I login with \"([^\"]*)\" and \"([^\"]*)\"$") 
public void i_login_with_and(String user, String password) throws Throwable { 
    // Login... 
} 

РЕЖИМА УСТАНОВОК перед каждым сценарием и запуском деятельности.

В глобальном масштабе, если он удовлетворяет ваши потребности, я не вижу никаких проблем с его использованием, поэтому аннотации с огурцами и аннотации JUnit могут быть проанализированы таким образом.

Я создал образец проекта: github.com/Clutcha/EspressoCucumber

+0

AndroidJUnitRunner является тот, который разбирает JUnit аннотаций. Если я использую AndroidJunitRunner, он не будет разбирать мои аннотации с файловыми файлами, stepdefn и огурцами. – sowmia

+0

Если вы посмотрите в методе onCreate, вы увидите следующую строку: instrumentationCore.create (bundle); который инициализирует бегун огурца и в методе onStart, есть призыв к огурцу: instrumentationCore.start(); который будет выглядеть и разбирать аннотации огурца. Кроме того, как вы сказали, я унаследовал от AndroidJUnit и назвал свой базовый класс после инициализации огурца, чтобы проанализировать аннотации JUnit. –

+0

Позвольте мне рассказать вам об этом. Но звучит хорошо – sowmia

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