2015-11-27 2 views
6

Ich suche nach einer Möglichkeit, eine Aktivität mit JUnit4 und der ActivityTestRule zu testen, aber mit einer anderen Anwendungsklasse (z. B. gespottet oder geerbt). Ich war in der Lage, dies für Bibliotheksprojekte mithilfe der Manifestzusammenführung und der Tools zu erhalten: replace = "android: name" auf dem Anwendungs-Tag in androidTest/AndroidManifest.xml. Dies funktioniert jedoch nicht für Anwendungen.Android-Aktivität mit verschiedenen Anwendungsklassen testen

Irgendwelche Ideen, wie dies getan werden kann?

Antwort

16

Sie können die mit Ihrem eigenen Läufer ableiten und newApplication() mit Ihrer benutzerdefinierten Anwendungsklasse überschreiben.

public class CustomTestRunner extends AndroidJUnitRunner { 

@Override 
public Application newApplication(ClassLoader cl, String className, Context context) throws InstantiationException, IllegalAccessException, ClassNotFoundException { 
    return super.newApplication(cl, CustomTestApplication.class.getName(), context); 
} 
} 

Stellen Sie sicher, dass build.gradle mit dem neuen Läufer wie folgt zu aktualisieren:

testInstrumentationRunner "com.mypackage.name.path.CustomTestRunner"

+2

Danke für diesen Hinweis: testInstrumentationRunner "com.mypackage.name.path.CustomTestRunner". Viele andere Tutorials haben dies nicht geschafft. –

+2

Wenn Sie Ihren Test auch außerhalb von Android Studio ausführen, müssen Sie möglicherweise Ihren 'Specific instrumentation runner' in Ihrer Run/Debug-Konfiguration aktualisieren, um auf Ihren CustomTestRunner-Gegenwert zu verweisen. – Max