Android Unit-Test: Cucumber-jvm + Android Instrumentation

Mit: Cucumber-JVM mit Android Instrumentation + Espresso).

Referenz Github link: https://github.com/mfellner/cucumber-android für diese. Das einfache Beispiel funktioniert.

Problem mit cucumber-jvm + android instrumentation:
Aber in dem Beispiel im link, es nutzt ActivityInstrumentationTestCase2, die veraltet ist. Ich möchte mit @Regel – ActivityTestRule Klasse wie gesagt von Google.

Hier meine Frage ist:
Für die Verwendung von cucumber-jvm, ich bin mit dem CucumberInstrumentationCore statt
testInstrumentationRunner „android.Unterstützung.test.runner.AndroidJUnitRunner“.

Also Android junit-Annotationen wie @ – Regel für ActivityTestRule nicht analysiert CucumberInstrumentation. So Ist es möglich, dieses problem zu überwinden?

Dann ist meine Entscheidung für cucumber-jvm + android instrumentation hat, rückgängig gemacht werden. Meine Frage ist nicht nur für die veraltete Klasse, aber weltweit ist es eine gute Idee, gehen für cucumber-jvm + android instrumentation, wie Sie nicht verwenden können, instrumentation-Funktionen, weil der annotation analysieren.

InformationsquelleAutor sowmia | 2016-02-24



One Reply
  1. 10

    Ihre Läufer sollten Erben von 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();
    }

    Achten Sie auf die super-Klasse initialisiert wurde am Ende von onCreate.

    Dann, Bearbeiten Sie Ihre defaultConfig in deinem build.Grad Datei:

    defaultConfig {
        applicationId "your.package.name"
    
        testApplicationId "your.steps.package"
        testInstrumentationRunner "your.package.Instrumentation"     
    }

    Und schließlich die Schritte definition der Klasse, die geerbt von ActivityInstrumentationTestCase2 Aussehen sollte:

    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...
    }

    Den setUp-Funktion ausgeführt wird, bevor jedes Szenario, und starten Sie die Aktivität.

    Weltweit, wenn es für deine Bedürfnisse sehe ich keine problem mit es so auf, beide Gurke Annotationen und JUnit-Annotationen kann analysiert werden, auf diese Weise.

    Habe ich einen Beispiel-Projekt: github.com/Clutcha/EspressoCucumber

    • AndroidJUnitRunner ist eine, die analysiert die Junit-Annotationen. Wenn ich AndroidJunitRunner, es wird nicht analysiert mein feature-Datei, stepdefn und Gurke Anmerkungen.
    • Wenn Sie Aussehen wird in der onCreate-Methode, sehen Sie die folgende Zeile: instrumentationCore.erstellen(bundle); die Initialisierung der Gurken-Läufer und in der onStart-Methode, es ist ein Aufruf zu der Gurke: instrumentationCore.start(); was suchen Sie und analysieren Sie die Gurke Anmerkungen. Auch, wie Sie sagte, ich Erben von AndroidJUnit und den Aufruf der Basisklasse nach dem Gurken-Initialisierung zu analysieren, die JUnit-Annotationen.
    • Lassen Sie mich versuchen und lassen Sie wissen. Klingt aber Okay
    • Ich habe es versucht und es ist nicht die Anerkennung der feature-Dateien in der Erwägung, dass, wenn ich entfernen AndroidJunitRunner es läuft. hav u habe es ausprobiert und es funktioniert für u
    • Ja. Es ist für mich arbeiten. Ich kann hochladen, ein sample-Projekt auf github, wenn Sie wollen.
    • Versuchen Sie das Beispiel: github.com/Clutcha/EspressoCucumber
    • Ich habe versucht, Ihre Probe und funktioniert einwandfrei. Vielen Dank für den code. Ich habe noch ein Zweifel in der Umsetzung. BaseSteps hat ActivityTestRule und launchingActivity-Methode aufgerufen wird. Meine Frage ist „wie BaseStep ist ActivityTestRule ausgeführt wird, unter Berücksichtigung der LoginSteps noch nicht verlängert. ist es nur, weil stepdefn package-name wird als com.Beispiel.app.stepDefinitions ??
    • Die ActivityTestRule erfolgt in der setUp-Methode in der BaseSteps-Datei. Es läuft vor jedem test, denn ich bin mit Gurke die @Before-annotation. Und ja, deine Annahme ist richtig, den com.Beispiel.app.stepDefinitions sagt der Gurken-Rahmen, wo die Suche nach der test-Funktionen.
    • Ich habe einfach mal den code und es wird nicht ausgeführt buildToolsVersion „23.0.2“.. Es wirft mich ein Fehler java.lang.IllegalStateException: Keine Messtechnik eingetragen
    • Ihre Instrumentation Klasse können auch Erben von AndroidJUnitRunner aber was ich glaube ist, dass JUnit tests in Ihrer androidTest Ordner wird nicht ausgeführt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.