2015-12-24 2 views
6

Ich bekomme diesen Fehler beim Testen der Aktivität starten mit Espresso.Espressotest fehlgeschlagen: Gesucht, 1 Absicht zu entsprechen, tatsächlich übereinstimmte 2 Absichten

android.support.test.espresso.base.DefaultFailureHandler $ AssertionFailedWithCauseError: Es sollte 1 Absichten übereinstimmen. Eigentlich entspricht 2 Absichten.

Überraschenderweise werden andere Aktivitätsstart-Tests mit demselben Code bestanden.

@RunWith(AndroidJUnit4.class) 
public class HomeActivityTest { 

    @Rule 
    public final IntentsTestRule<HomeActivity> mHomeActivityRule = new IntentsTestRule<HomeActivity>(HomeActivity.class); 


    @Test 
    public void testFundTransferActivityStarted() { 

    onView(withId(R.id.button_fund_transfer)).perform(click()); 

    intended(hasComponent("mypackage.FundTransferActivity")); 
} 

} 

Mit einem Klick auf die Schaltfläche wird die FundTransfer-Aktivität mit startActivity gestartet.

+0

Sie müssen wie in diesem Beispiel 'bestimmt (allof (hasAction (Intent.ACTION_DIAL), HasData (INTENT_DATA_PHONE_NUMBER))) ein weiteres Argument hinzuzufügen; } ' – piotrek1543

+0

ist Problem gelöst – piotrek1543

+0

@ piotrek1543 Haben nicht versucht. Aber warum muss ich allOf hinzufügen? Warum stimmt es mit zwei Absichten überein? – SohailAziz

Antwort

7

Können Sie die vollständige Fehlermeldung einfügen, die Sie erhalten haben?

Die Fehlermeldung würde die Konfiguration der 2 Intents auch übereinstimmen. Wenn beide Absichten die gleiche Konfiguration haben, bedeutet dies, dass Sie zweimal zwischen 0.anrufen, d. H. Zwischen Test gestartet und Test beendet. Die folgende Antwort ist für einen bestimmten Fall, wenn Sie die gleiche Absicht zweimal aufrufen.

Zweimal anrufen ist ein vollkommen legitimer Fall. Zum Beispiel

Schritt 1: Tippen Sie auf Button1 Galerie zu starten und ein Bild und zeigt in ImageView1 zu holen (zunächst ImageView1 ist GONE und jetzt ist es VISIBLE).
Schritt 2: Tippen Sie auf ImageView1, um die Galerie erneut zu starten.

Nun, wenn Sie testen wollten "Klopfen auf ImageView1 sollte Galerie starten", dann können Sie nicht einfach auf ImageView1 tippen, da es zunächst nicht sichtbar ist. Sie müssen zuerst auf Button1 tippen. Wenn Sie dies tun, müssen Sie die Galerie zweimal starten.

Daher intended(hasComponent("mypackage.FundTransferActivity")); wird nicht funktionieren. Stattdessen verwenden: intended(hasComponent("mypackage.FundTransferActivity"), times(2));

Verwandte Themen