Ich habe ein leeres Standardprojekt in Android Studio 2.1.2 mit API 24 erstellt. Im Beispielprojekt bietet Google eine abgelehnte Klasse ApplicationTestCase an:
Diese Klasse wurde auf API-Ebene 24 nicht mehr unterstützt. Verwenden Sie ActivityTestRule stattdessen. Neue Tests sollten mit der Android-Testunterstützung .__ geschrieben werden. Bibliothek.
Probe:
import Android.app.Application;
import Android.test.ApplicationTestCase;
/**
* <a href="http://d.Android.com/tools/testing/testing_Android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}
Meine Frage: Warum ist Android Test Case jetzt veraltet? Wie kann ich ApplicationTestCase durch ActivityTestRule ersetzen?
EDIT:
Ich versuche es mit Expresso, aber auf API 24 (compileSdkVersion 24
) habe ich diesen Fehler:
Error:Conflict with dependency 'com.Android.support:appcompat-v7'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.Android.support:design'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.Android.support:support-annotations'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Error:Conflict with dependency 'com.Android.support:recyclerview-v7'. Resolved versions for app (24.0.0) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
Wenn ich versuche, diese lib in mein build.gradle einzufügen:
// Android JUnit Runner
androidTestCompile 'com.Android.support.test:runner:0.5'
// JUnit4 Rules
androidTestCompile 'com.Android.support.test:rules:0.5'
// Espresso core
androidTestCompile 'com.Android.support.test.espresso:espresso-core:2.2.2'
// Espresso-contrib for DatePicker, RecyclerView, Drawer actions, Accessibility checks, CountingIdlingResource
androidTestCompile 'com.Android.support.test.espresso:espresso-contrib:2.2.2'
// Espresso-web for WebView support
androidTestCompile 'com.Android.support.test.espresso:espresso-web:2.2.2'
// Espresso-idling-resource for synchronization with background jobs
androidTestCompile 'com.Android.support.test.espresso:espresso-idling-resource:2.2.2'
Meine Schlussfolgerung ist, dass momentan weder Android Test Case noch Expresso auf Android API 24 funktioniert. Ist das richtig?
EDIT: 2016-08-05
Ich behebe den vorherigen Fehler in Expresso so:
def espressoVersion = '2.2.2'
def testRunnerVersion = '0.5'
androidTestCompile "com.Android.support.test:rules:${testRunnerVersion}"
androidTestCompile "com.Android.support.test.espresso:espresso-core:${espressoVersion}"
configurations.androidTestCompile.dependencies.each { androidTestCompileDependency ->
androidTestCompileDependency.exclude group: 'com.Android.support'
}
Das neue androidTest Beispiel, das die Beta-Version von Android Studio 2.2 generiert, sieht folgendermaßen aus:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() throws Exception {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("org.mypackage", appContext.getPackageName());
}
}
Genau wie die Warnung über die Verleumdung vorschlägt, sollten die neuen Instrumentierungstests InstrumentationRegistry
verwenden, anstatt von AndroidTestCase
auszugehen. Führen Sie sie mit AndroidJUnit4
aus.
Der relevante dependencies
-Abschnitt in build.gradle
sieht folgendermaßen aus:
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
Wie in der API-Dokumentation angegeben, wurde die API nicht mehr unterstützt. Stattdessen wird die Verwendung von InstrumentationRegistry.getTargetContext () als Methode onCreate der Klasse Application aufgerufen.
Das getTargetContext ruft die im Android Manifest definierte ApplicationStartupService - Klasse auf.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
<application
Android:name=".service.ApplicationStartupService"
public class ApplicationStartupService extends Application
{
/**
* Method initializes the application configuration
*/
@Override
public void onCreate(){
super.onCreate();
this.initResources()
}
private void initResource(){
//do your application init work here.
}
}
Test Class
@RunWith(AndroidJUnit4.class)
public class ApplicationStartupServiceTest {
@Test
public void testResourcesAreInitializedd() throws Exception {
//do your assertions here.
}
https://developer.Android.com/reference/Android/test/ApplicationTestCase