2016-05-08 9 views
6

Wie höre ich ActivityTestRule'sbeforeActivityLaunched() Methode in einem Android-Test.Wie man Android ActivityTestRules beforeActivityLaunched Methode in einem Android-Test

Meine Problemumgehung erstellt eine benutzerdefinierte ActivityTestRule und bietet einen Rückruf für Konstruktor. Ist es eine schlechte Übung? Genauso ist es OK, auf die ActivityTestRule-Konstruktormethode zu warten.

Hier ist mein Code:

public class CustomActivityTestRule<A extends Activity> extends ActivityTestRule<A> { 

    public interface onBeforeListener{ 
     void onBefore(String message); 
    } 

    private onBeforeListener listener; 

    public CustomActivityTestRule(Class<A> activityClass, onBeforeListener listener) { 
     super(activityClass); 
    } 

    @Override 
    protected void beforeActivityLaunched() { 
     super.beforeActivityLaunched(); 
     listener.onBefore("before activity launch"); 
    } 
} 

In android Testklasse, ich kann so etwas tun:

@Rule public CustomActivityTestRule<MainActivity> mainActivityActivityTestRule = new 
      CustomActivityTestRule<MainActivity>(MainActivity.class, new CustomActivityTestRule.onBeforeListener() { 
     @Override 
     public void onBefore(String message) { 
      //do something before activity starts 
     } 
    }); 

gleiche Art und Weise sie in der Lage sind, etwas auf junit Regel instanziierenden zu tun. Gibt es eine andere Möglichkeit, auf die Instanziierung von Junit-Testregeln zu achten?

Antwort

5

Sie können beforeActivityLaunched außer Kraft setzen, ohne eine neue Klasse zu erstellen.

Ich verwende die folgende in meinen Tests:

@Rule 
public ActivityTestRule<MainActivity> mainActivityActivityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class) { 

    @Override 
    protected void beforeActivityLaunched() { 
     super.beforeActivityLaunched(); 
    } 

}; 
2

Sie können die Testregel konfigurieren, so dass es nicht automatisch Ihre Tätigkeit beginnen.

@Rule 
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class, false, false); 

In Ihrer Setup-Methode können Sie alles vorbereiten, was Sie brauchen, und dann die Aktivität starten.

activityTestRule.launchActivity(null); 

Siehe auch